diese schleife:
1.
Code:
do {taste = PollSwitch();}
while( taste != PollSwitch() );
habe ich eingebaut, da PollSwitch() manchmal falsche werte liefert, jedoch nicht zwei mal hintereinander. wenn also der wert 2 mal gleich ist, kann man davon ausgehen, dass er richtig ist
2.
switch-case kann man verwenden, wenn man eine variable auf verschiedene werte überprüfen will (müsste eigentlich in der anleitung auch beschrieben sein, aber trotzdem eine kurze erklärung)
der aufbau ist folgendermaßen:
Code:
switch( zu_prüfende_variable )
{
case wert_1:
//... befehle, die ausgeführt werden sollen, wenn zu_prüfende_variable == wert_1
break; //um switch zu verlassen, wenn man es auslässt werden die nächsten befehle ebenfalls ausgeführt, auch wenn wert_1 != zu_prüfende_variable
case wert_2:
//...
....
default:
//... befehle, für den fall, dass sonst nichts zu trifft, muss nicht unbedingt vorhanden sein
}
3.
bei deiner abfrage:
if ((taste>0) && (PollSwitch()>0) & 0x000001) {StatusLED (GREEN);}
musst du wissen, dass sich der µC bei vergleichen (<,>,==,!=,...) immer nur das ergebnis, also TRUE und FALSE oder 1 und 0 merkt.
schauen wir nun was da bei deiner abfrage heraus kommt wenn ein taster gedrückt werd:
taste>0 ==> TRUE
PollSwitch()>0 ==> TRUE
(taste>0) && (PollSwitch()>0) entspricht also TRUE && TRUE ==> TRUE
TRUE & 0x000001 ist das selbe wie 1 & 1 ==> 1, also TRUE
das heißt, wenn du irgend einen taster drückst ist sofort das erste if() richtig. daher leuchtet die statusLED grün, und die ganzen else if werden übersprungen
wenn du es also mit if und else schaffen möchtest, musst du am besten so abfragen:
Code:
if(taste == 1){ //....}
else if(taste == 2){//....}
...
PS: ich habe auch erst nach einiger zeit gemerkt, was eigentlich in deinen if vor sich geht
Lesezeichen