En un proyecto que desarrollo necesito implementar un menú en una pantalla GLCD 128x64, buscando por la red encontré este excelente
proyecto en el que utilizan un display Nokia 6100. A partir de esa librería, me dedique a entender como trabaja y tomando su estructura re-escribí la librería para un GLCD monocromático
Para crear un elemento del submenú tenemos la siguiente estructura:
typedef struct{
char TipoMenu;
rom char *TextoMenu;
rom char *PtrMenuSeleccion;
}MENU;
Un ejemplo en la creación de un Submenú:Creamos Menú principal: - El primer elemento direcciona al volver atrás en el submenú:
- MENU_MAIN o SUBMENU_ANTERIOR: Regresa a pantalla principal o a un submenú anterior.
- vInicializaSistemaDisplay: Función a ejecutar al regresar atrás.-
- Segundo elemento: Primer ítem del menú a crear:
- MENU_SUBMENU: Indica que al seleccionar este se debe crear otro submenú.
- "Sub Menu": Texto del ítem.-
- SubMenu1: Submenú a crear y dibujar.-
- Tercer elemento: Segundo ítem del menú a crear:
- MENU_COMANDO: Indica que al ejecutar tal ítem se ejecuta una función.-
- "Control Motor": Texto del ítem.
- vControlMotor: Función que se ejecuta, puede generar una pantalla con mensaje, barra deslizante o nada.-
- Sexto elemento: Elemento que indica finalización del menú.-
MENU MenuPrincipal[]={
{MENU_MAIN,"",vInicializaSistemaDisplay},
{MENU_SUBMENU,"Sub Menu",SubMenu1},
{MENU_COMANDO,"Control Motor",vControlMotor},
{MENU_COMANDO,"Backlight",vControlBack},
{MENU_COMANDO,"About",vMuestraAbout},
{MENU_FIN,"",0}
};
El programa está controlado por medio de punteros a la memoria de programa. Por ejemplo en el bucle del programa principal (main), ejecuta una función (vEjecutaFuncion(Evento)) apuntada por el puntero *FuncionActualEjecucion, el cual direcciona las distintas funciones que trabajan con los eventos en las distintas pantallas presentadas en el GLCD.
Por ejemplo al dibujar la pantalla principal cargamos en puntero la función vEventosPantallaPrincipal, la cual atenderá los eventos, en este caso solo se espera a que se pulse el botón inferior derecho para acceder al submenú.
Al clickear en menú ejecutamos la función vSeleccionMenu(MenuPrincipal,1) que dibujará el Menú seleccionado y volverá a direccionar el puntero a la función vEventosSubMenu, la cual atiende los eventos que ocurran en el menú dibujado en pantalla. Es mas o menos un resumen de cómo trabaja el código.
Dentro de las opciones de menús del tipo comando tenemos:Visualizar mensaje simple:Visualizar opción a ejecutar:Visualizar deslizador para modificar una variable:Visualizar una variable:Vídeo de muestra: (El video no muestra la ultima opción de menú, lo desarrolle después
)
Se adjunta proyecto con el ejemplo mostrado. Al ser flexible, se pueden ir agregando otras opciones de menús.
Saludos!