#include <LCDMenuLib.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Encoder.h>
// Definición de constantes
const int PIN_ENCODER_A = 32;
const int PIN_ENCODER_B = 33;
const int PIN_ENCODER_PULSADOR = 25;
// Dirección I2C del LCD
const int direccionLCD = 0x27;
// Objeto para el encoder
Encoder encoder(PIN_ENCODER_A, PIN_ENCODER_B);
// Objeto para el LCD
LiquidCrystal_I2C lcd(direccionLCD, 16, 2);
// Objeto para el menú
LCDMenu menu(&lcd);
// Menús y submenús
LCDMenuItem menuPrincipal = LCDMenuItem("Menú Principal");
LCDMenuItem menuConfiguracion = LCDMenuItem("Configuración");
LCDMenuItem menuMonitoreo = LCDMenuItem("Monitoreo");
LCDMenuItem menuAcciones = LCDMenuItem("Acciones");
LCDMenuItem submenuConfiguracionWiFi = LCDMenuItem("Wi-Fi");
LCDMenuItem submenuConfiguracionBluetooth = LCDMenuItem("Bluetooth");
LCDMenuItem submenuConfiguracionOpciones = LCDMenuItem("Opciones");
LCDMenuItem submenuMonitoreoTemperatura = LCDMenuItem("Temperatura");
LCDMenuItem submenuMonitoreoHumedad = LCDMenuItem("Humedad");
LCDMenuItem submenuMonitoreoPresion = LCDMenuItem("Presión");
LCDMenuItem submenuAccionesReiniciar = LCDMenuItem("Reiniciar");
LCDMenuItem submenuAccionesActualizar = LCDMenuItem("Actualizar");
LCDMenuItem submenuAccionesSalir = LCDMenuItem("Salir");
void setup() {
Serial.begin(115200);
pinMode(PIN_ENCODER_PULSADOR, INPUT_PULLUP);
Wire.begin();
lcd.init();
lcd.backlight();
// Agregar menús y submenús
menu.addMenuItem(&menuPrincipal);
menu.addMenuItem(&menuConfiguracion);
menu.addMenuItem(&menuMonitoreo);
menu.addMenuItem(&menuAcciones);
menuConfiguracion.addMenuItem(&submenuConfiguracionWiFi);
menuConfiguracion.addMenuItem(&submenuConfiguracionBluetooth);
menuConfiguracion.addMenuItem(&submenuConfiguracionOpciones);
menuMonitoreo.addMenuItem(&submenuMonitoreoTemperatura);
menuMonitoreo.addMenuItem(&submenuMonitoreoHumedad);
menuMonitoreo.addMenuItem(&submenuMonitoreoPresion);
menuAcciones.addMenuItem(&submenuAccionesReiniciar);
menuAcciones.addMenuItem(&submenuAccionesActualizar);
menuAcciones.addMenuItem(&submenuAccionesSalir);
// Asignar acción a cada submenú
submenuConfiguracionWiFi.setAction([]() {
Serial.println("Configuración Wi-Fi");
});
submenuConfiguracionBluetooth.setAction([]() {
Serial.println("Configuración Bluetooth");
});
submenuConfiguracionOpciones.setAction([]() {
Serial.println("Configuración Opciones");
});
submenuMonitoreoTemperatura.setAction([]() {
Serial.println("Monitoreo Temperatura");
});
submenuMonitoreoHumedad.setAction([]() {
Serial.println("Monitoreo Humedad");
});
submenuMonitoreoPresion.setAction([]() {
Serial.println("Monitoreo Presión");
});
submenuAccionesReiniciar.setAction([]() {
Serial.println("Reiniciar");
});
submenuAccionesActualizar.setAction([]() {
Serial.println("Actualizar");
});
submenuAccionesSalir.setAction([]() {
Serial.println("Salir");
});
}
void loop() {
// Leer el estado del pulsador del encoder
int pulsador = digitalRead(PIN_ENCODER_PULSADOR);
// Leer el cambio en el encoder
int cambioEncoder = encoder.read();
// Actualizar menú
menu.update(cambioEncoder, pulsador);
menu.display();
delay(50);
}