Moin Michael,
kann sein das ich auch total falsch oder ungewöhnlich an die Sache Menu herangehe, das ist meine erste selbst programmierte Menuführung.
Der Begriff Entprellen ist mir zwar neu, aber nach kurzer Google suche meine ich nun zu wissen was es bedeutet. Quasi den Impuls durch das Tasten zeitlich zu begrenzen bzw. einzugrenzen, sodas nur in einer bestimmten Funktion der Impuls verarbeitet wird und nicht in der nächsten. Richtig?
Wenn ich das so ist, beantworte ich deine Frage mit ja. Genau deswegen brauche ich ja die Schleife und auch damit die neuen Tast-impulse regestriert werden.
Da ich nun Zuhasue bin poste ich mal den relevanten Code:
void loop()
{
button3state = digitalRead(button3);
if ((button3state == HIGH) && (button3preset == 1))
{
MainMenu();
}
else if (button3state == HIGH)
{
button3preset = 1;
}
ReadAndShow();
//-------------------------------------------------------------------
void MainMenu()
{
button1set = 0; // reset der taster variablen
button1preset = 0;
button2set = 0;
button2preset = 0;
button3set = 0;
button3preset = 0;
// --------------------- Menu anzeigen ----------------------------
lcd.clear();
lcd.print("**** MAIN MENU *****");
lcd.setCursor(0, 1);
lcd.print("Sensors ->");
lcd.setCursor(0, 2);
lcd.print("SD Card ->");
lcd.setCursor(0, 3);
lcd.print("Quit <-");
do // ------------------ Taster abfragen ------------------------------
{
button1state = digitalRead(button1);
button2state = digitalRead(button2);
button3state = digitalRead(button3);
if ((button1state == HIGH) && (button1preset == 1)) // abfrage für taster 1
{
button1set = 1; // aufruf naechste ebene // aktion
}
else if (button1state == LOW)
{
button1preset = 1;
}
if ((button2state == HIGH) && (button2preset == 1)) // abfrage für taster 2
{
SDcard(); // aufruf naechste ebene // aktion
}
else if (button2state == LOW)
{
button2preset = 1;
}
if ((button3state == HIGH) && (button3preset == 1)) // abfrage für taster 3
{
button3preset = 0;
button3set = 1; // zurueck vorherige ebene
}
else if (button3state == LOW)
{
button3preset = 1;
}
delay(1);
}
while(button3set == 0);
}
// ---------------------------------------------------
void SDcard()
{
button1set = 0; // reset der taster variablen
button1preset = 0;
button2set = 0;
button2preset = 0;
button3set = 0;
button3preset = 0;
// --------------------- Menu anzeigen ----------------------------
lcd.clear();
lcd.print("***** SD CARD ******");
lcd.setCursor(0, 1);
lcd.print("interval = ");
lcd.print(timeset);
lcd.setCursor(17, 1);
lcd.print("min");
lcd.setCursor(0, 3);
lcd.print("Quit <-");
do // ------------------ Taster abfragen ------------------------------
{
button1state = digitalRead(button1);
button2state = digitalRead(button2);
button3state = digitalRead(button3);
if ((button1state == HIGH) && (button1preset == 1)) // abfrage für taster 1
{
button1set = 1; // aufruf naechste ebene // aktion
}
else if (button1state == LOW)
{
button1preset = 1;
}
if ((button2state == HIGH) && (button2preset == 1)) // abfrage für taster 1
{
button2set = 1; // aufruf naechste ebene // aktion
}
else if (button2state == LOW)
{
button2preset = 1;
}
if ((button3state == HIGH) && (button3preset == 1)) // abfrage für taster 1
{
button3preset = 0;
MainMenu();
}
else if (button3state == LOW)
{
button3preset = 1;
}
delay(1);
}
while(button3set == 0);
}
}
Mir geht es um den Vorgang aus dem MainMenu in das SD menu und wieder zurück.
Vermutlich war mein Ansatz zu Objektorientiert also bezogen auf das Menu. Wie auch immer, meine ursprüngliche Frage bleibt allerdings noch bestehen. Bekomme ich irgendwelche Probleme wenn ich aus der Schleife eine neue Funktion aufrufe und aus der neuen wieder zurück springe?
Grüße