@@ -23,36 +23,71 @@ Ideal para proyectos que requieren interfaces de usuario compactas y fáciles de
2323``` cpp
2424#include < Wire.h>
2525#include < LiquidCrystal_I2C.h>
26- #include < Encoder.h>
27- #include < SimpleMenu.h>
26+ #include " SimpleMenu.h"
2827
28+ // Inicializar LCD I2C (0x27, 20x4)
2929LiquidCrystal_I2C lcd (0x27, 20, 4);
30- Encoder encoder(4, 5);
31- MenuSystem menu(lcd, 6);
3230
31+ // Funciones para las opciones del menú
3332void accion1() {
3433 lcd.clear();
35- lcd.print("Accion 1");
34+ lcd.print("Accion 1 ejecutada ");
3635}
3736
37+ void accion2() {
38+ lcd.clear();
39+ lcd.print("Accion 2 ejecutada");
40+ }
41+
42+ void submenuOpcion1() {
43+ lcd.clear();
44+ lcd.print("Submenu opcion 1");
45+ }
46+
47+ void submenuOpcion2() {
48+ lcd.clear();
49+ lcd.print("Submenu opcion 2");
50+ }
51+
52+ void salir() {
53+ lcd.clear();
54+ lcd.print("Saliendo...");
55+ }
56+
57+ // Definición del menú
3858std::vector<MenuItem > menuRoot = {
39- { "Opcion 1", accion1, {} },
40- { "Salir", nullptr, {} }
59+ { "Accion 1", accion1, {} },
60+ { "Accion 2", accion2, {} },
61+ { "Submenu", nullptr, {
62+ { "Subopcion 1", submenuOpcion1, {} },
63+ { "Subopcion 2", submenuOpcion2, {} },
64+ { "Volver", nullptr, {} }
65+ }
66+ },
67+ { "Salir", salir, {} }
4168};
4269
70+ // Pines botones: UP, DOWN, SELECT
71+ SimpleMenu menu(lcd, 4, 5, 6);
72+
73+ // Estado general mostrado cuando no se está en menú
74+ void mostrarEstadoGeneral() {
75+ lcd.clear();
76+ lcd.print("Sistema Operativo");
77+ lcd.setCursor(0,1);
78+ lcd.print("Menu listo...");
79+ lcd.setCursor(0,2);
80+ lcd.print("Use botones");
81+ lcd.setCursor(0,3);
82+ lcd.print("para navegar");
83+ }
84+
4385void setup() {
44- pinMode(6, INPUT_PULLUP);
4586 lcd.init();
4687 lcd.backlight();
47-
48- menu.setRootMenu(&menuRoot);
49- menu.resetPosition();
50- menu.setOldPosition(0);
51- menu.showMenu();
88+ menu.begin(&menuRoot, mostrarEstadoGeneral);
5289}
5390
5491void loop() {
55- long pos = encoder.read() / 5;
56- bool btn = (digitalRead(6) == LOW);
57- menu.update(pos, btn);
92+ menu.update();
5893}
0 commit comments