Exacto ArduMyth quizás no sea la mejor opción, también tengo un pulsador y lo he probado, pero me pasa lo mismo... cuando está pulsado entro al menú y si pulso por ejemplo el 1 para acceder al submenú Nº1 no accede porque la tecla sigue pulsada, si dejo de pulsar la tecla vuelvo a la pantalla principal saliendo del menú.
Por lo que puedo hacerlo con pulsador o con interruptor de palanca, eso me da igual, el caso es que no sé cómo hacerlo, porque siempre el loop me vuelve a cargar el menú principal y no sé cómo poder navegar por el submenú...
He cambiado un poco el código para tenerlo más estructurado pero sigo sin encontrar la manera de solucionarlo:
void loop(){
if (digitalRead(botonmenu) == HIGH) {
pantallaprincipal();}
if(digitalRead(botonmenu) == LOW){ //en cuanto muevo la palanca para LOW entra al menú
menu();}
}
void menu(){
// Texto a mostrar en pantalla LCD
lcd.setCursor(0,0);
lcd.write(" Elija una opcion ");
lcd.setCursor(0,2);
lcd.write("1 - Horario riegos "); //si pulso 1 para entrar a la función modificaralarmas(); se queda en la pantalla del menú principal porque el pulsador sigue en LOW
lcd.setCursor(0,3);
lcd.write("2 - inicio y fin ");
lcd.setCursor(0,1);
lcd.write(" ");
// Método de selección de opciones
char key1 = keypad.getKey();
int pasadoaint = (key1-48);
switch (pasadoaint) {
case 1:
Serial.print("Menú de horarios y riegos");
modificaralarmas(); //si pulso 1 para entrar a la función modificaralarmas(); se queda en la pantalla del menú principal porque el pulsador sigue en LOW
break;
case 2:
Serial.print("Definir variables de inicio y fin de riegos");
definirvariablesinicioyfin();
break;
}
}
// Función principal para modificar las alarmas de riego
void modificaralarmas(){
Serial.println(" Dentro de modificaralarmas() ");
lcd.setCursor(0,0);
lcd.write("1 - ver horarios ");
lcd.setCursor(0,1);
lcd.write("2 - modificar horas ");
lcd.setCursor(0,2);
lcd.write("2 - borrar horas ");
lcd.setCursor(0,3);
lcd.write("4 - agregar riegos ");
char key2 = keypad.getKey();
if (key2 == '1') {
Serial.print(" Ver horarios");
modificaralarmas();
}
if (key2 == '2') {
Serial.print(" modificar horas");
definirvariablesinicioyfin();
}
if (key2 == '3') {
Serial.print(" borrar horas");
modificaralarmas();
}
if (key2 == '4') {
Serial.print(" agregar riegos");
definirvariablesinicioyfin();
}
if (key2 == '*') {
Serial.print(" Volver al menú principal");
menu();
}
}
void pantallaprincipal(){
Pantalla principal con datos de los sensores... funciona correctamente
}
¿¿¿¿ Alguna ayuda de cómo hacerlo de la manera que me comenta ArduMyth?
if(palancaestaarriba && estaEnMenu){
estaEnMenu = false;
}
GRACIAS!!