condicional if en bucle para menu lcd

Muy buenas, yo solia programar en picbasic pro y estaba muy acostumbrado a los goto, quiero hacer un menu scrooll con una flechita en lcd con arduino, que previamente lo hice en basic.
el problema que tengo en arduino es que cuando utilizo el condiconal if, no me entra en un bucle infinito
y cualquier boton que presione se va al menu asignado, son cuatro botones, (menu,arriba, abajo, enter).
cuando pulso menu, sale un menu que hice con la flechita en la opcion 1, pero no quiero que al pulsar abajo se me valla a ese menu, porque primero tiene que entrar a menu y depsues es que yo utilizo abajo para bajar la flechita, pero no se como separar los botones para que cada uno cumpla su funcion en el lugar especifico. dejo el codigo para mas entendimiento. lo que quiero es separar la primera condicion de la segunda, es decir que si estando en el mensaje de inicio, si presiono la flecha abajo no debe hacer nada, solo me debe funcionar la menu la flecha abajo solo debe funcionar cuando entre al menu. entonces como hago para separar esos condicionales. lo he hecho con goto y se va, lo he hecho con subrutinas y nada. por favor lo quiero hacer solo con condicionales, no quiero hacerlo con puerto analogico. el menu es mas largo y con submenus pero solo pongo ese pequeño codigo para q se entienda mas

#include <LiquidCrystal.h>

// definimos los pines para el lcd
LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
byte flecha[8] = {B00000, B00100, B00010, B11111, B00010, B00100, B00000,};

int menu=3;// pin 3 sera el boton menu
int arriba=2;// pin 2 sera el boton arriba
int abajo=1;// pin 1 sera el boton abajo
int enter=0;// pin 0 sera el boton enter

void setup() {

lcd.begin(16, 2);// numero de columnas y filas de la lcd
lcd.createChar(0, flecha);
pinMode(menu, INPUT); // pin "menu" como entrada
pinMode(abajo, INPUT); // pin "abajo" como entrada
pinMode(arriba, INPUT); // pin "arriba" como entrada
pinMode(enter, INPUT); // pin "enter" como entrada

delay(500);
lcd.setCursor(4, 0);
lcd.print("LIMPIADOR");
lcd.setCursor(3, 1);
lcd.print("ULTRASONICO");}

void loop(){

if(digitalRead(menu)==true){

delay (150);
lcd.clear();
lcd.setCursor(0, 0); lcd.write(byte (0)); lcd.print("1.ULTRASONIDO");
lcd.setCursor(1, 1); lcd.print("2.TEMPERATURA");}

if(digitalRead(abajo)==true){
delay (150);
lcd.clear();
lcd.setCursor(1, 0); lcd.print("1.ULTRASONIDO");
lcd.setCursor(0, 1); lcd.write(byte (0)); lcd.print("2.TEMPERATURA");}

}

[code
/*
 No se si he entendido bien tu cuestión pero ahí va eso:
 Si agregas 2else" delante de los "if"... Una vez se verifique un "if" los demás son descartados.
 También puedes usar "case" donde se selecciona una opción se descartan las demás opciones.
 con "return;" paras la ejecución de esa función y continuas en la línea siguiente a su llamada.
*/

void loop(){   

if(digitalRead(menu)==true){

    delay (150);
    lcd.clear();
    lcd.setCursor(0, 0); lcd.write(byte (0)); lcd.print("1.ULTRASONIDO");
    lcd.setCursor(1, 1); lcd.print("2.TEMPERATURA");

}else     // Te falta esto ****************************************


if(digitalRead(abajo)==true){
    delay (150);
    lcd.clear();
    lcd.setCursor(1, 0);  lcd.print("1.ULTRASONIDO");
    lcd.setCursor(0, 1); lcd.write(byte (0)); lcd.print("2.TEMPERATURA");}

}


//Perdona si no atiné con la respuesta. Bye!!

no, así da lo mismo. no lo he podido hacer, en basic lo meto en un bucle y listo. pero aqui cualquier boton que unda se cumple el if. solo quiero que se cumpla el primer if y dentro de ese if que se cumpla el segundo

A ambos, a ver si ponen códigos usando tags. Leean las normas del foro por favor.
Muchos no ayudamos cuando se postean mal los códigos o enlaces.
No cuesta mucho, solo van a editar y seleccionan todo el código y luego </>

surbyte:
A ambos, a ver si ponen códigos usando tags. Leean las normas del foro por favor.
Muchos no ayudamos cuando se postean mal los códigos o enlaces.
No cuesta mucho, solo van a editar y seleccionan todo el código y luego </>

+1

Saludos

Necesitas anidar los IF.

if(digitalRead(menu)==true){

     delay (150);
     lcd.clear();
     lcd.setCursor(0, 0); lcd.write(byte (0)); lcd.print("1.ULTRASONIDO");
     lcd.setCursor(1, 1); lcd.print("2.TEMPERATURA");
     
     if(digitalRead(abajo)==true){
                delay (150);
                lcd.clear();
                lcd.setCursor(1, 0);  lcd.print("1.ULTRASONIDO");
                lcd.setCursor(0, 1); lcd.write(byte (0)); lcd.print("2.TEMPERATURA");}
    }
}

Espero te funcione.

Aunque eso es lo que el pide, no creo que en 150 mseg presione la secuencia de las dos teclas que le permita caer en el segundo menú.
Esto no es Basic, es C, asi que mejor sería que veas como son las estructuras de C.

Lo que yo te aconsejo es que la presion del primer botón Menu ponga una variable en un valor y con esa variable que podemos llamar menuStatus = 1 entonces tienes todo el tiempo del mundo para presionar la tecla Abajo y ser reconocida porque YA ESTAS en menuStatus = 1.
Se entiend?