Hallo Jungs und Mädels,
ich hab hier wohl ein altes/alltägliches Problem, das wohl schon zigfach gelöst wurde, ich jedoch einfach nicht umgesetzt bekomme.
Es geht um die Mehrfachverwendung eines Tasters.
Mein Taster soll beim ersten Drücken die Funktion menu aufrufen (im Moment ist dort nur eine Option vorhanden) und dort die "Auswahl" dann mit einem zweiten Drücken bestätigen und dadurch die Funktion scan aufrufen.
Ich habe jetzt schon alles mögliche ausprobiert, habe mit 2-3 Variablen gearbeitet, die dann jeweils den Status des Tasters zwischenspeicherten und dann versucht das ganze mit if Abfragen und mehreren Bedingungen zu realisieren. Aber irgendwie haut das ganze nicht so hin, wie ich will. Wenn ich denke, das es eigentlich richtig rein müsste, überspringt er dennoch die zweite Abfrage.
Da die schönste Beschreibung ohne Code ja doch nichts bringt, habe ich die relevanten Codestücke mal unten angefügt:
#include <Bounce.h>
// MenuButton
int RotaryButtonState = 0;
int RotaryButtonStateOld =0;
int RotaryAction =0;
void menu (){
//Anzeige SCAN
siebensegment (scan_einer[0], scan_zehner[0]);
delay (1000);
unsigned long startTime = millis();
while (millis() - startTime < 4000) //Wartezeit
{ // check for input. Break if found
RotaryButtonState = bouncer.read();
if ((RotaryButtonState == 1)&& (RotaryButtonStateOld == 1)) {
scan() ;}
} // When we get here, either there was input or the time expired.
//ohne Scan Aktivierung zurück zur Anzeige
siebensegment (kanaele_einer[x], kanaele_zehner[x]);
}
void loop() {
bouncer.update ( );
RotaryButtonState = bouncer.read();
if ((RotaryButtonState == 1)&& (RotaryButtonStateOld == 0)&& (RotaryAction==0)) { // enter menu
RotaryButtonStateOld = 1;
RotaryAction=1;
RotaryButtonState = bouncer.read();
if((RotaryButtonState == 0)&&(RotaryButtonStateOld == 1)) {(RotaryButtonStateOld = 0);}
menu();}
}
Kann mir irgendjemand helfen? Allein steig ich wohl einfach nicht durch. Ich verstehe auch irgendwie nicht warum die die Variable nicht manuell nach dem Ausführen immer wieder zurücksetzen kann.
Also quasi nach Betreten der Funktion menu den Status mit "RotaryButtonState=0" wieder zurücksetzen und dann erneut auslesen und mit ner If Bedingung dann die Scan-Funktion auslösen. Da springt er dann auch immer direkt durch.
Wo ist mein Denkfehler?