Menu y Submenu con LCD

Buena noche, tengo una gran duda, estoy tratando de hacer un menu con su respectivo sub menu, pero no me deja regresar al menu principal, el codigo que tengo es el siguiente.

#include <LiquidCrystal.h>
LiquidCrystal lcd(10, 9, 8, 7, 6, 5); //PIN-OUT LCD

//VARS
char inChar;
String cadena = "";
String data;
int lng = 0;
int Scw = 0;
int x=0;


void setup() {

  
  //LCD CONFIG.
  lcd.begin(20, 4);
  delay(500);

  //BUTTONS
  pinMode(14, INPUT_PULLUP);
  pinMode(15, INPUT_PULLUP);
  pinMode(16, INPUT_PULLUP);
  pinMode(17, INPUT_PULLUP);
  
  //LCD BACKLIGHT
  pinMode(4,OUTPUT);
  digitalWrite(4, HIGH);
    
  //COM SERIAL.
  Serial.begin(9600);
  delay(500);

}
void loop() {
     menu();
}

void menu(){
   boolean exitMenu   = false;
   lcd.clear();
   while(!exitMenu){
      lcd.setCursor(0,0);
      lcd.print("1-MANUAL");
      lcd.setCursor(0,1);
      lcd.print("2-AUTOMATICO");
      lcd.setCursor(0,2);
      lcd.print("3-AJUSTE TEMPERATURA");
      lcd.setCursor(0,3);
      lcd.print("4-VOLT Y TEMP");
      if(digitalRead(14)==LOW){
          manual();
        }
    }
}
         
void manual(){
    boolean exitSubMenu = false;
    lcd.clear();
    while(!exitSubMenu){
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("1-REGRESAR");
          lcd.setCursor(0,1);
          lcd.print("2-PULSO");
          if (digitalRead(14) == LOW){
             lcd.clear();
             exitSubMenu = true;          
          }
    }
}

Probablemente lo que ocurre es que la pulsación para salir del submenu haga que salgas del mismo, pero al regresar al menu principal tambien la detecte y entre de nuevo al submenu. De todas formas, la forma en la que estás intentando elaborar tu menu no está muy optimizada. Te resultará más fructífero utilizar alguna de las librerías de menus que pululan por ahí, aunque tengas que echar un rato en leer su documentación o partir de alguno de sus ejemplos modificándolo a tus necesidades.
Si lo que deseas es hacerlo por ti mismo, pienso que deberías buscar un mecanismo para:

  • Leer fuera de las funciones (por ejemplo dentro del loop) las pulsaciones. De paso, aplicar antirrebote.
  • Mantener una variable global que indique en qué menu/submenu te hallas.
  • Dentro del loop, si ha habido pulsación de tecla (así te evitas parpadeos, redibujando la pantalla cuando no es necesario) mediante un switch/case, escoger la función correspondiente al menu actual y tecla pulsada.

Y ya para nota, lo podrías hacer mediante estructuras o (mejor aún) objetos de una clase "menu", que contengan a su vez punteros a otros objetos de su clase. De esta forma es como están realizadas las librerías que te citaba antes.