Hola a todos, estoy haciendo un menu en un lcd....tengo una funcion que muestra el menu principal y con un encoder rotativo recorre las opciones, cuando el switch "ok" es pulsado muestra un submenu.
Para no hacer una funcion por cada menu o submenu yo quiero usar la misma funcion para todo y asi no tener un codigo extenso...modifique la funcion y pase valores para que sea universal.
La pregunta es si puedo volver a llamar a la funcion dentro de la misma, sabiendo que hay una variable local llamada "idxMenu"... por lo que tengo entendido es que las variables locales se destruyen cuando finaliza la funcion pero en este ejemplo que dejo aca esa variable se crea nuevamente cuando llamo devuelta a la misma funcion.
Hice una prueba y funciona pero no tengo en claro que es lo que realmente pasa con esa variable
Cogido de ejemplo, faltan algunas cosas pero la idea esta clara
Muchas gracias saludos
#define MENU_PRINCIPAL 0
String text_Menu_Principal[] = {
"Opcion_1",
"Salir"
};
const byte item_Menu_Principal = COUNT(text_Menu_Principal); // Numero de items/opciones del menu principal
#define OPCION_1 1
String text_Opcion_1[] = {
"Opcion_1_1",
"Salir"
};
const byte item_Opcion_1 = COUNT(text_Opcion_1); // Numero de items/opciones del menu opcion_1
#define OPCION_1_1 2
String text_Opcion_1_1[] = {
"Valor_1",
"Valor_2",
"Salir"
};
const byte item_Opcion_1_1 = COUNT(text_Opcion_1_1); // Numero de items/opciones del menu opcion_1_1
void setup()
{
}
void loop()
{
openMenu( text_Menu_Principal, item_Menu_Principal, MENU_PRINCIPAL);
}
void openMenu( String *txMenu, byte iMenu, byte Menu )
{
byte idxMenu = 0;
boolean exitMenu = false;
lcd.clear();
while( !exitMenu )
{
btnPressed = readButtons(); //lee estado de los botones
if( btnPressed == Button::Up && idxMenu-1 >= 0 )
{
idxMenu--; //decrementa posición de cursor
}
else if( btnPressed == Button::Down && idxMenu+1 < iMenu )
{
idxMenu++; //incrementa posición de cursor
}
else if( btnPressed == Button::Ok )
{
if( Menu == MENU_PRINCIPAL )
{
switch( idxMenu )
{
case 0: openMenu( text_Opcion_1, item_Opcion_1, OPCION_1); break;
case 1: exitMenu = true; break; //Salir
}
}
else if( Menu == OPCION_1 )
{
switch( idxMenu )
{
case 0: openMenu( text_Opcion_1_1, item_Opcion_1_1, OPCION_1_1); break;
case 1: exitMenu = true; break; //Salir
}
}
}
}
lcd.clear();
}