Controlando múltiples acciones con menú lcd

No tengo mucha experiencia pero logré hacer este menú con submenus en un lcd. Ahora quisiera llevarlo a la realidad pero no estoy seguro de cómo. Quisiera que sucediera un output dependiendo de opciones previamente elegidas. Por ejemplo: en primera instancia pregunta si quieres opción A u opción B, después(habiendo por ejemplo elegido la opción A) si quieres la opción A.1, A.2, A.3, A.4 o A.5 y después si quieres la subopción a, b o c(+las opciones pasadas) ;y después de recolectar los datos que ejecute una opción que incluya todas las anteriores.

Sé que no es información completa o detallada pero si supieran un acercamiento a esto seria de mucha ayuda.

Tu código nos daría una pista del problema.

éste es el código, básicamente necesito que el arduino “recuerde” o “almacene” las opciones.
Suponiendo que el menú principal A o B(tipo de acción del motor) y el submenú(normal, rápido, etc.) es el accionamiento del motor, dependiendo de la opción que se elija va a ser la velocidad del motor + el relay(1, 2 o 3) que se decida accionar. El giro del motor y el accionamiento del relay elegido pasaría al final de haber elegido las opciones.

#include <LiquidCrystal.h> 
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; 
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

#define Home 0
#define Menu_principal1 1
#define Menu_principal2 2
#define submenu1 3
#define submenu1a 4
#define submenu1b 5
#define submenu1c 6
#define submenu2 7
#define submenu2a 8
#define Relay1 9
#define Relay2 10
#define Relay3 11
#define BTN_Menu 0
#define BTN_Exit 1
#define BTN_Up 2
#define BTN_Down  3


uint8_t estado = Home;

uint8_t button[4] = {
  10,
  9,
  8,
  7
};

uint8_t button_state[4];
uint8_t flancosubida (int btn) {
  uint8_t valor_nuevo = digitalRead(button[btn]) ;
  uint8_t result = button_state[btn] != valor_nuevo && valor_nuevo == 1;
  button_state[btn] = valor_nuevo;
  return result;
}

void setup() {
  pinMode(button[BTN_Menu], INPUT_PULLUP); 
  pinMode(button[BTN_Exit], INPUT_PULLUP);
  pinMode(button[BTN_Up], INPUT_PULLUP);
  pinMode(button[BTN_Down], INPUT_PULLUP);

  button_state[0] = HIGH;
  button_state[1] = HIGH;
  button_state[2] = HIGH;
  button_state[3] = HIGH;

  lcd.begin(16, 2);
  printHome();
}

void printHome() {
  lcd.clear();
  lcd.setCursor(3, 0);
  lcd.print("Bienvenido");
  lcd.setCursor (6, 1);
  lcd.print(":D");
}



void printMenu_principal1() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print (">A");
  lcd.setCursor(0, 1);
  lcd.print ("B");
}

void printMenu_principal2() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print ("A");
  lcd.setCursor(0, 1);
  lcd.print (">B");
}

void printsubmenu1() {
  switch (estado) {
    case submenu1:
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print (">Normal");
      lcd.setCursor(0, 1);
      lcd.print ("Rapido");



  }
}
void printsubmenu1a() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print (">Rapido");
  lcd.setCursor(0, 1);
  lcd.print ("Muy rapido");
}

void printsubmenu1b() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print (">Muy rapido");
  lcd.setCursor(0, 1);
  lcd.print ("+rapido");
}

void printsubmenu1c() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print (">+rapido");
  lcd.setCursor(0, 1);
  lcd.print ("-----");
}

void printsubmenu2() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print (">Light");
  lcd.setCursor(0, 1);
  lcd.print ("Heavy");
}

void printsubmenu2a() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print ("Light");
  lcd.setCursor(0, 1);
  lcd.print (">Heavy");
}


void printRelay1 () {
  lcd.clear();
  lcd.setCursor (0, 0);
  lcd.print (">Relay1");
  lcd.setCursor (0, 1);
  lcd.print ("Relay2");

}

void printRelay2 () {
  lcd.clear();
  lcd.setCursor (0, 0);
  lcd.print ("Relay1");
  lcd.setCursor (0, 1);
  lcd.print (">Relay2");

}
void printRelay3 () {
  lcd.clear();
  lcd.setCursor (0, 0);
  lcd.print ("Relay2");
  lcd.setCursor (0, 1);
  lcd.print (">Relay3");

}

void loop() {
  switch (estado) {
    case Home:
      if (flancosubida(BTN_Menu)) {
        estado = Menu_principal1;
        printMenu_principal1();
      }
      break;

    case Menu_principal1:
      if (flancosubida(BTN_Exit)) {
        estado = Home;
        printHome();
      }

      if (flancosubida(BTN_Menu)) {
        estado = submenu1;
        printsubmenu1();


      }

      if (flancosubida(BTN_Down)) {
        estado = Menu_principal2 ;
        printMenu_principal2();

      }

      break;

    case Menu_principal2:
      if (flancosubida(BTN_Exit)) {
        estado = Home;
        printHome();
      }

      if (flancosubida(BTN_Menu)) {
        estado = submenu2;
        printsubmenu2();
      }



      if (flancosubida(BTN_Up)) {
        estado = Menu_principal1 ;
        printMenu_principal1();
      }

      break;



    case submenu1:

      if (flancosubida(BTN_Down)) {
        estado = submenu1a;
        printsubmenu1a();
      }

      if (flancosubida(BTN_Menu)) {
        estado = Relay1;
        printRelay1();
      }



      else {
        if (flancosubida(BTN_Exit)) {
          estado = Menu_principal1;
          printMenu_principal1();
        }
      }

    case submenu1a:
      if (flancosubida(BTN_Up)) {
        estado = submenu1;
        printsubmenu1();
      }

      if (flancosubida(BTN_Down)) {
        estado = submenu1b;
        printsubmenu1b();
      }

      if (flancosubida(BTN_Menu)) {
        estado = Relay1;
        printRelay1();
      }

      else {
        if (flancosubida(BTN_Exit)) {
          estado = Menu_principal1;
          printMenu_principal1();
        }
      }


      break;




    case submenu1b:
      if (flancosubida(BTN_Up)) {
        estado = submenu1a;
        printsubmenu1a();
      }

      if (flancosubida(BTN_Down)) {
        estado = submenu1c;
        printsubmenu1c();
      }

      if (flancosubida(BTN_Menu)) {
        estado = Relay1;
        printRelay1();
      }
      else {
        if (flancosubida(BTN_Exit)) {
          estado = Menu_principal1;
          printMenu_principal1();
        }
      }
      break;
    case submenu1c:
      if (flancosubida(BTN_Up)) {
        estado = submenu1b;
        printsubmenu1b();
      }
      if (flancosubida(BTN_Menu)) {
        estado = Relay1;
        printRelay1();
      }
      else {
        if (flancosubida(BTN_Exit)) {
          estado = Menu_principal1;
          printMenu_principal1();
        }
      }
      break;

    case Relay1:
      if (flancosubida(BTN_Down)) {
        estado = Relay2;
        printRelay2();
      }
      else {
        if (flancosubida(BTN_Exit)) {
          estado = submenu1;
          printsubmenu1();
        }
      }
      break;

    case Relay2:
      if (flancosubida(BTN_Down)) {
        estado = Relay3;
        printRelay3();
      }

      if (flancosubida(BTN_Up)) {
        estado = Relay1;
        printRelay1();
      }

      else {
        if (flancosubida(BTN_Exit)) {
          estado = submenu1;
          printsubmenu1();
        }
      }
      break;
    case Relay3:
      if (flancosubida(BTN_Up)) {
        estado = Relay2;
        printRelay2();
      }

      else {
        if (flancosubida(BTN_Exit)) {
          estado = submenu1;
          printsubmenu1();
        }
      }
      break;

    case submenu2:
      if (flancosubida(BTN_Menu)) {
        estado = submenu2;
        printsubmenu2();
      }



      if (flancosubida(BTN_Down)) {
        estado = submenu2a;
        printsubmenu2a();
      }

      else {
        if (flancosubida(BTN_Exit)) {
          estado = Menu_principal1;
          printMenu_principal1();
        }
      }
      break;

    case submenu2a:
      if (flancosubida(BTN_Up)) {
        estado = submenu2;
        printsubmenu2();
      }

      else {
        if (flancosubida(BTN_Exit)) {
          estado = Menu_principal1;
          printMenu_principal1();
        }
      }
      break;
  }
}

No reinventes la rueda, usa esta librería LCD MENU Library

Mira sus ejemplos y adaptala a tu necesidad.