#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire(4);
DallasTemperature sensor(&oneWire);
LiquidCrystal_I2C lcd(0x27, 16, 2);
int upButton = 10;
int downButton = 11;
int selectButton = 12;
int led1 = 13;
int menu = 1;
const int maxMenu = 4; // Número máximo de opciones en el menú principal
const int maxSubMenu = 3; // Número máximo de opciones en el submenú
int submenu = 0;
void setup() {
lcd.init();
lcd.backlight();
sensor.begin();
pinMode(upButton, INPUT_PULLUP);
pinMode(downButton, INPUT_PULLUP);
pinMode(selectButton, INPUT_PULLUP);
pinMode(led1, OUTPUT);
updateMenu();
}
void loop() {
float temperature_C = sensor.getTempCByIndex(0);
if (!digitalRead(upButton)) {
if (submenu == 0) {
menu = (menu - 1 <= 0) ? maxMenu : menu - 1;
} else {
submenu = (submenu - 1 <= 0) ? maxSubMenu : submenu - 1;
}
updateMenu();
delay(200); // Debounce
}
if (!digitalRead(downButton)) {
if (submenu == 0) {
menu = (menu + 1 > maxMenu) ? 1 : menu + 1;
} else {
submenu = (submenu + 1 > maxSubMenu) ? 1 : submenu + 1;
}
updateMenu();
delay(200); // Debounce
}
if (!digitalRead(selectButton)) {
excecute();
delay(200); // Debounce
}
}
void updateMenu() {
float temperature_C = sensor.getTempCByIndex(0);
if (submenu == 0) {
switch (menu) {
case 0:
menu = 1;
break;
case 1:
lcd.clear();
lcd.print(">LED 1");
lcd.setCursor(8, 0); // display position
lcd.print(temperature_C);
lcd.setCursor(1, 1);
lcd.print("LED 2");
break;
case 2:
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("LED 1");
lcd.setCursor(0, 1);
lcd.print(">LED 2");
break;
case 3:
lcd.clear();
lcd.print(">LED 3");
lcd.setCursor(1, 1);
lcd.print("LED 4");
break;
case 4:
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("LED 3");
lcd.setCursor(0, 1);
lcd.print(">LED 4");
break;
case 5:
menu = 4;
break;
}
} else if (menu == 1) {
lcd.clear();
lcd.print("LED 1");
lcd.setCursor(0, 1);
lcd.print((submenu == 1) ? ">ON" : "ON");
lcd.setCursor(4, 1);
lcd.print((submenu == 2) ? ">OFF" : "OFF");
lcd.setCursor(9, 1);
lcd.print((submenu == 3) ? ">Salir" : "Salir");
}
}
void excecute() {
if (submenu == 0) {
switch (menu) {
case 1:
submenu = 1; // Entramos al submenu del LED1
updateMenu();
break;
}
} else if (menu == 1) {
switch (submenu) {
case 1:
digitalWrite(led1, HIGH);
updateMenu();
break;
case 2:
digitalWrite(led1, LOW);
updateMenu();
break;
case 3: // Opción de "Salir" en el submenú
submenu = 0; // Vuelve al menú principal
updateMenu();
break;
}
}
}