Hallo Zusammen,
ich versuche gerade ein Menue zu Programmieren. Um in das Menue zu
kommen soll eine Taste eine Secunde lang gedrückt werden. Danach soll
mit jedem weiteren druck der Taste in den nächsten Menue Punkte
gesprungen werden. Das klapt auch so weit sehr gut.
Allerdings soll wenn ich im lezten Menue Punkt bin mit einem weiteren
Druck der Taste das Menue verlassen werden.
Leider spring ich dann immer zurück in den ersten Menuepunkt.
//Ende Tasterabfrage plus entprellung und Zeitverzögerung für Menue
62
63
//Gehe durch das Menue.
64
if(menuePunkt!=0&&menueOn){
65
menueOn=false;
66
menuePunkt++;
67
}
68
69
if(menuePunkt==1){
70
analogWrite(5,255);
71
}elseif(menuePunkt==2){
72
analogWrite(6,255);
73
}elseif(menuePunkt==3){
74
analogWrite(11,255);
75
}elseif(menuePunkt==4){
76
analogWrite(5,0);
77
analogWrite(6,0);
78
analogWrite(11,0);
79
menuePunkt=0;
80
}
81
}
Ich komm leider nicht drauf wo mein logischer Fehler liegt.
Danke schon mal für eure hilfe und noch mehr danke an die jenigen die es
sich verkneifen können mich dumm anzumachen weil ich erst mal
Programmierun lernen soll oder das der Code völliger mist ist oder,
oder, oder...
Ist ja leider in nicht ganz unüblich hier.
bis dann und Danke
Amper
Ohne debuggen
z.B. per LCD, uart, notfalls LEDs ist das ganz schwierig, den Fehler zu
finden.
Du kannst mal versuchen menuePunkt auf 255 zu setzen. Wenn dann 1
addiert wird ist er bei 0.
Hallo Grunschüler,
ich hab die ganzen Serial.print `s rausgenommen da der Code sonst
ziemlich durcheinander ist. Ein paar LED´s hab ich auch drann um sehen
zu was der yC gerade so macht.
@Achim S. ja das hab ich auch gesehen ich brauch das (if(statusMenue ==
true && menuePunkt == 0){) aber um beim ersten Druchlauf überhaubt ins
menue zu kommen.
Wenn ich jede menge Serial.print eingebaut habe kann ich sehen das ich
den statusMenue wider auf false setzte bevor die abfrage kommt
allerdings muss ich dazu den taster ziemlich schnell wider loslassen.
Was keine Lösung ist.
Ich habs:
Ich hab noch eine Bool eingesetzt die gesetzt wird wenn ich das Menue
verlasse und erst wider rückgesetzt wird wenn ich den Tasterloslasse.
Wahrscheinlich gibt es noch eine elegantere Lösung aber mir fällt gerade
keine ein.
Amper schrieb:> Ich hab noch eine Bool eingesetzt die gesetzt wird wenn ich das Menue> verlasse und erst wider rückgesetzt wird wenn ich den Tasterloslasse.
Natürlich darf man nicht nur das Drücken auswerten, da man ja auf die
Flanke reagieren will. Das Loslassen zu prüfen ist also essentiell.
Amper schrieb:> Wahrscheinlich gibt es noch eine elegantere Lösung aber mir fällt gerade> keine ein.
Tasten entprellen und Flanke erkennen braucht man sehr oft. Daher lohnt
es sich, dafür eine extra Task zu implementieren, die dann nur noch die
fertigen Ereignisse liefert.
Das macht dann auch die Auswertung in der Mainloop deutlich einfacher
und übersichtlicher.
Z.B.:
Beitrag "Universelle Tastenabfrage"
Ich hab auf Taster nahezu ganz verzichtet und mache Eingaben per
ir-Fernbedienung. Einmal programmiert ist das universell einsetzbar. Nur
ein Pin und nahezu unbegrenzte Möglichkeiten für Menus.
Wenn ich irgendwann mal fertig werde poste ich nen Bild von der Uhr, da
passt ne Ferhnbedinung einfach nicht zu.
Aber ja hab ich bei meine Lichtsteuerung auch bietet auch mehr
möglichkeiten wie drei Taster :)
bis dann