naja ich hab halt nur
if ... geschrieben damit die topic-ersteller auch noch bissl was zu denken hat :p
Druckbare Version
naja ich hab halt nur
if ... geschrieben damit die topic-ersteller auch noch bissl was zu denken hat :p
Hallo
Nein, ganz im Gegenteil. Mit Mehrfachabfrage und Return() außerhalb der While-Schleife würde es dann etwa so aussehen:Zitat:
Ich hoffe ich habe nicht noch mehr Verwirrung gestiftet
Und mit nur einem (langsamen) PollSwitch() und einer "Entprellung" durch die IF-Abfrage:Code:while(1){
taste1=PollSwitch();
taste2=PollSwitch();
if((taste1 > 0) && (taste1 == taste2)) {StatusLED(RED);} // Wird eine Taste gedrückt --> LED = Rot
else {StatusLED(GREEN);} // Keine Taste --> LED = Grün
}
return 0;
Das ist übrigens mein persönlicher Favorit, mit drei Abfragen auch sehr sicher.Code:while(1){
taste1=PollSwitch();
if((taste1 > 0) && (taste1 == taste2)) {StatusLED(RED);} // Wird eine Taste gedrückt --> LED = Rot
else {StatusLED(GREEN);} // Keine Taste --> LED = Grün
taste2=taste1;
}
return 0;
Gruß
mic
standardmäßig passiert ebi einem mikrocontroller nichts. auch die statusled wird nicht rot.
im gegenteil, man sollte darauf achten dass das programmende nie erreicht wird; ansonsten steht de prozessor n einem sogenannten undefinierten zustand in dem (theoretisch) alles mögliche passieren könnte.
die beste lösung ist vermutlich tatsächlich eine endlosschleife, in der mit if abgefragt wird.
hallo radbruch,
zwei sachen:
1. ist taste1=PollSwitch(); die deklaration von taste1 oder nur eine zuweisung? wenn ja: wie wird taste1 deklariert?
2. muss im zweiten code von dir nicht auch taste2=PollSwitch(); stehen?
Hallo Weiti
taste1 sollte natürlich zuvor deklariert sein, als Byte bzw. Char weil der Rückgabewert von PollSwitch() so aussieht:
unsigned char PollSwitch (void)
taste2 speichert den letzten mit PollSwitch() ermittelten Wert (der ja in taste1 steht) und wird am Ende der Schleife zugewiesen (und muss natürlich auch zuvor als Char deklariert sein):
taste2=taste1
Dann kann man in der If-Abfrage die zwei nacheinander ermittelten Tastenwerte vergleichen. taste1 aus der aktuellen Schleife und taste2 aus der vorhergehenden Schleife. Dadurch spart man sich einen Aufruf von PollSwitch(). Zur Erhöhung der Zuverlässigkeit des Tastenwertes kann man dann noch einen dritten Tastenwert aus der vorletzen Schleife abfragen (if((taste1 > 0) && (taste1 == taste2) && (taste1 == taste3) den man mit
taste3=taste2;
taste2=taste1;
auch am Ende der Schleife gespeichert hat. Das funktioniert natürlich nur, wenn die Tasten halbwegs genau kalibriert sind und bei Betätigung (meistens) den ihnen zugewiesenen Wert erzeugen (1,2,4,8,16 und 32)
Gruß
mic