Problema con menú al que se accede desde un interruptor

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!!