Libreria de menus

Hola todos.

He estado buscando algun ejemplo echo o libreria sencilla de usar para hacer y gestionar menus. En realidad pretendo que sea un menu a traves de un lcd y pulsadores (concretamente la LCD kaypad shield de dfrobot), pero vamos, que para enterarme o entender como hacerlo, que es lo que quiero, me vale cualquiera.

He conseguido hacer una de solo un nivel, el problema viene cuando intento que una opcion tenga a su vez submenus, distintas opciones.

Lo mas parecido que he conseguido encontrar es esto:

http://www.arduino.cc/playground/Code/Menu

pero no encuentro la expliacion de como trabajan sus funciones y con el codigo me hago un peazo de lio... estoy empezando ahora con arduino.

Para estar empezando te has metido en un proyecto algo complejo, espero que no te desanimes.

Yo tengo que hacer uno para un aparato y aun no me he metido de lleno en ello, pero documentándome encontré un ejemplo muy esclarecedor ¡OJO! NO ES CODIGO es una especie de algoritmo escrito en inglés.

enum States
{
State_MainMenu,
State_SubMenu1,
State_SubMenu2
};

int state = State_MainMenu;

void loop()
{
switch (state)
{
case State_MainMenu:
Mainmenu();
break;

case State_SubMenu1:
submenu1();
break;

case State_SubMenu2:
submenu2();
break;
}
}

void Mainmenu()
{
read input
if (user selected option 1?)
state = State_SubMenu1;
else if (user selected option 2)
state = State_SubMenu2;

draw main menu
}

void submenu1()
{
read input
if (user selected back option?)
state = State_MainMenu;
else if (something else?)
state = some other state;

draw submenu1
}

etc.

Como verás es prácticamente definir unos estados que cambiarán según unas lecturas, dentro del loop() una estructura switch se encarga de que el menú haga una cosa u otra.

Hola,

Hay varias formas de enfocar el tema de menus, las que se me ocurren:

  1. La que casi todos empezamos, un switch grande. Tienes una variable que indica el menu en el que estas, cada vez que bajas a un submenu le sumas 10, 100, 1000 etc. Por ejemplo, tienes que la capa superior son 6 menus, entonces cuando vas dando a +/- para ir cambiando menu, pues sumas/restas +1. Si le das a aceptar, intro o como quieras llamar a la tecla que te baja al siguiente submenu, le sumas +10 . Si quieres bajar un nivel mas, +1000..... No se si me he explicado bien.
    Es decir, si estoy en el Menu principal 5, y le doy INTRO, le sumo +10. Entonces mi variable menu ahora vale 50.

leo_entradas()
si tecla_up -> menu+1
si tecla_down -> menu -1
si tecla_acc -> si menu <10 entonces menu +10
si tecla_esc -> si menu>10 entonces menu-10
funcion_mirar_menu_dentro_limites();

switch (menu)
case 1:
bla,bla,bla
break;
case 2:
bla,bla,bla
break;
....
case 50:
bla,bla
break;

Es una manera facil de entender, pero termina siendo un lio de codigo si tu menu es grande.

  1. Maquina de estados. Tipo a lo que te ha puesto josemanu (con un switch, con if, etc). Yo hice una libreria precisamente para el manejo de menus=> SECUduino/FSM Library at master · IgorReal/SECUduino · GitHub
    Puedes encontrar un pdf donde explica como usarla. El post original es http://arduino.cc/forum/index.php/topic,75826.0.html
    La ventaja, es que es muy facil cambiar menus, anyadir/borrar, etc.
    Personalmente, es la que mas me gusta.

  2. Puntero a funciones. Vas recorriendo arrays que contienen un puntero a la funcion a ejecutar. Para esta necesitas tener cierto nivel de C.

Saludos :wink:

Igor R.

Nota- ni acentos ni enyes

Gracias por la contestacion.

Estoy probando usando variables. Una me indica el nivel en el que estoy, y otra la opcion de esa nivel en la que me encuentro... a ver si saco algo en claro...