Submenu en arduino uno lcd 16x2

hola gente como estan?Mi nombre es lionel,tengo 27 años y soy de buenos aires,argentina,estoy con un proyecto que nesecitaria si son tan amables que me den una mano,nobleza obliga confensar que quizas las ganas de crear el proyecto para casa supera al conocimiento que poseo en arduino,sepan disculpar si algunas cosas resultan ser muy obvias o estar equivocados en el desarrollo de otras…sin mas rodeos la situacion es la siguiente:

Estoy intentando hacer una especie de maquinas de jugos,la cual constaria de un arduino uno y un servo motor,y mediante una pantalla lcd 16x2 y 3 botones (MENU-boton 1-boton 2)seleccionariamos el modo y el tipo de jugo a tomar(que son 2:naranja y maracuya).En este link voy a dejar un grafico de cual es mi idea y tambien dejare el codigo que tengo…(se puede visualizar en “tinkercad” ACA

Cuales son los problemas con que me encuentro son que,por ejemplo,el codigo originalmente era para una pantalla 20x4 y 4 botones,yo trate de adaptarlo a mi nesecidad(16x2 y 3 botones),pero no contemplaba la idea de que se desaroyen submenus,en principio desearia saber la opinion de la gente que sabe mas que yo,en que si ven viable el "formato"del codigo para lograr el fin que yo deseo…

intente “generar” un nuevo switch dentro de los casos del switch,y tambien intente con un “if”,pero no logro hacer que las acciones que tomo en determinado "menu"no afecte al resto del programa,por ejemplo:

Estaba probando la alimentacion del servomotor,y lo asociaba al estado del pin correspondiente al boton 1,entonces,si presionaba (o no,segun si lo ponia cuando lea que este high o low)el boton funcionaba el servo,pero si en el "supuesto"menu 2 presionaba el 1 hacia la misma ejecucion obviamente…

Otra icognita que me surge,y esto seria una vez logrado el esquema basico del programa “funcional”, es que,deseo que cuando pase una determinada cantidad de seg(Por ej,3 o 5 segundos)sin tocar ningun boton me retorne al menu principal,pense usar millis,pero no se como adaptarlo para la funcion que yo quiero,ya que esto solo cuenta el tiempo transcurrido…

inicio=millis();



delay(1000);



fin=millis();



transcurrido=fin-inicio;



Serial.print(transcurrido);



delay(500);

y aqui esta el codigo completo

#include <Servo.h>
#include <LiquidCrystal.h>

Servo servomotor;
int pulsador1=0; //almacena el estado del botón
int pulsador2=0;
int pulsador3=0;

int estado1=0; //0=led apagado, 1=led encendido
int estado2=0;
int estado3=0;

int pulsadorAnt1=0; //almacena el estado anterior del boton
int pulsadorAnt2=0;
int pulsadorAnt3=0;
int x;



LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

//** Programa **//

void setup() {
  Serial.begin(9600);
servomotor.attach(10);
pinMode (6, INPUT);
pinMode (7, INPUT);
pinMode (8, INPUT);

  

lcd.begin(16, 2);
lcd.setCursor(0,0); 
lcd.print("MAQUINA DE JUGOS");
lcd.setCursor(0,2);
lcd.print(" PRESIONE MENU");
  
}

void pulsar1() {
pulsador1 = digitalRead(6); //lee si el botón está pulsado

if((pulsador1==LOW)&&(pulsadorAnt1==HIGH)){ //si el boton es pulsado y antes no lo estaba
estado1++;
delay(20); //pausa de 40 ms
}
pulsadorAnt1=pulsador1; //actualiza el nuevo estado del boton

}
void pulsar2() {
pulsador2 = digitalRead(7); //lee si el botón está pulsado

if((pulsador2==LOW)&&(pulsadorAnt2==HIGH)){ //si el boton es pulsado y antes no lo estaba
estado2++;
delay(20); //pausa de 40 ms
}
pulsadorAnt2=pulsador2; //actualiza el nuevo estado del boton

}
void pulsar3() {
pulsador3 = digitalRead(8); //lee si el botón está pulsado

if((pulsador3==LOW)&&(pulsadorAnt3==HIGH)){ //si el boton es pulsado y antes no lo estaba
estado3++;
delay(20); //pausa de 40 ms
}
pulsadorAnt3=pulsador3; //actualiza el nuevo estado del boton


}


void loop()
{
pulsar1();
switch (estado1) {
case 1:
lcd.clear();
lcd.setCursor(0,0);
  lcd.print("1.AUTOMATICO"); 
  lcd.setCursor(0, 1);
  lcd.print("2.MANUAL");
 

case 2:
estado1=0;
break;
  
}
pulsar2();

switch (estado2) {
case 1:
lcd.clear();
delay(100);
lcd.setCursor(0,0);
  lcd.print(">1.50/50 %"); 
  lcd.setCursor(0, 1);
  lcd.print(">2.75/25 %");
delay(20); //pausa de 40 ms



case 2:
estado2=0;

break;
}
pulsar3();

switch (estado3) {
case 1:
lcd.clear();
delay(100);
lcd.setCursor(0,0);
  lcd.print("1.MARACUYA"); 
  lcd.setCursor(0, 2);
  lcd.print("2.NARANJA");
 

case 2:
estado3=0;
break;

}
}

Basicamente es esa mi duda,si alguien tuviese el tiempo y la amabilidad de leer el posteo y ver el codigo o el ejemplo en el tinkercad y de comentarme cual es su opinion al respecto estare muy agradecido.

EDIT:
los enlances han sidos retirados,se crearon hipervinculos en las palabras relacionadas para que se pueda apreciar…
Elegi tener una pantalla de 16x2 ya que solo cotemplaria 2 lineas las opciones y la eleccion entre 2 puntos del menu(Como se ve en el ejemplo de tinkercad…),tengo el codigo con 4 botones y pantalla de 20x4;El asunto es que tampoco permitia el despliegue de menu,lo use como puntapie inicial para darle forma al proyecto,espero haber corregido todo lo mencionado,y sabran disculpar el error…gracias!

Moderador
Por favor edita tu post usando etiquetas de código.
También veo dos enlaces que deben ir con etiquetas.

Lee las Normas del foro

Cuando publiques el código veremos que solución proponerte, ahora me parece raro que sin conocimientos cuestiones el uso de un LCD de 4 lineas 20 caracteres por uno mas chico e incluso quites un boton o pulsador.
Vale la pena?
En costo te aseguro que no, y en tiempo menos, si además agregamos que sabes poco de programación realmente no tiene sentido lo que quieres hacer.

De todos modos cuando publiques te daremos nuestro punto de vista.

Un menú con 3 botones usas ARRIBA, ABAJO y ENTER.
Un menú con 4 puede incluir un botón extra de EXIT. si es solo eso se puede implementar con una función de tiempo por ejemplo, es decir, detectar que no se presionan teclas cuando estas en modo menú o configuración y entonces es como que has decidido terminar, por supuesto luego de un ENTER que es el que valida que ese tiempo se ponga en marcha.
Como ves ya tienes una solución posible.

Ahora el tema LCD tmb puede adaptarse pero puede ser mas dificil.
Hasta no ver el código no se puede opinar.

Por favor edita tu código y postea correctamente.
Si supera 9k simplemente lo adjuntas.

Estuve intentando y no pude encontrarle la vuelta,intente hacer switch anidados,o agregarle "If"dentro de los case del switch original..
despues estuve intentando hacer que segun el numero de estado que hay actualizado el boton active una accion por ejemplo,estado3 haga la accion de "50% y 50%" y estado3 haga "25% y 75%",pero sin agregar estas acicone si no tengo en el case 2 estado=0; o si tengo un break; antes del case2 me titila el lcd y no me deja ver ni hacer nada...

Alguien podria orientarme en donde estoy fallando?

Muchas gracias