#include <LiquidCrystal.h>
#define RS 23
#define EN 22
#define D4 21
#define D5 19
#define D6 18
#define D7 5
#define time 200
#define LED_PIN_1 27
#define LED_PIN_2 14
#define LED_PIN_3 13
const int botonArribaPin = 35;
const int botonAbajoPin = 32;
const int botonSeleccionPin = 12;
int estado = 0; // 0 para Estado 1, 1 para Estado 2, 2 para Estado 3
int maxEstado = 2; // Número máximo de estados
int opciones[] = {LED_PIN_1, LED_PIN_2, LED_PIN_3};
int opcionPrincipal = 0;
int subopcionPrincipal = 0;
bool submenuActivo = false;
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);
void setup() {
pinMode(botonArribaPin, INPUT);
pinMode(botonAbajoPin, INPUT);
pinMode(botonSeleccionPin, INPUT);
lcd.begin(20, 4);
lcd.clear();
lcd.setCursor(3, 1);
lcd.print("hola amigos");
Serial.begin(9600);
for (int i = 0; i <= maxEstado; i++) {
pinMode(opciones[i], OUTPUT);
}
}
void PrintMenu() {
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("piso 1");
lcd.setCursor(1, 1);
lcd.print("piso 2");
lcd.setCursor(1, 2);
lcd.print("piso 3");
lcd.setCursor(0, opcionPrincipal);
lcd.print(">");
delay(time);
}
void PrintSubmenu1() {
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("piso 1");
lcd.setCursor(1, 1);
lcd.print("piso 2");
lcd.setCursor(1, 2);
lcd.print("piso 3");
lcd.setCursor(0, subopcionPrincipal);
lcd.print(">");
delay(time);
}
void LED() {
for (int i = 0; i <= maxEstado; i++) {
if (i == estado) {
digitalWrite(opciones[i], HIGH); // Encender el LED del estado actual
}
else {
digitalWrite(opciones[i], LOW); // Apagar los otros LEDs
}
}
}
void loop() {
int estadoArriba = digitalRead(botonArribaPin);
int estadoAbajo = digitalRead(botonAbajoPin);
int estadoSeleccion = digitalRead(botonSeleccionPin);
if (!submenuActivo) {
if (estadoArriba == LOW) {
delay(time);
opcionPrincipal--;
estado--;
if (opcionPrincipal < 0) {
opcionPrincipal = 2;
}
if (estado < 0) {
estado = 2;
}
PrintMenu();
}
if (estadoAbajo == LOW) {
delay(time);
opcionPrincipal++;
estado++;
if (opcionPrincipal > 2) {
opcionPrincipal = 0;
}
if (estado > 2) {
estado = 0;
}
PrintMenu();
}
if (estadoSeleccion == LOW) {
delay(time);
switch (opcionPrincipal) {
case 0:
submenuActivo = true;
PrintSubmenu1();
LED();
break;
case 1:
submenuActivo = true;
PrintSubmenu1();
LED ();
break;
case 2:
submenuActivo = false;
PrintMenu();
LED();
break;
}
}
}
else {
int estadoArribaSubmenu = digitalRead(botonArribaPin);
int estadoAbajoSubmenu = digitalRead(botonAbajoPin);
if (estadoArribaSubmenu == LOW)
{
delay(time);
subopcionPrincipal--;
estado--;
if (subopcionPrincipal < 0) {
subopcionPrincipal = 2;
}
if (estado < 0) {
estado = 2;
}
switch (opcionPrincipal) {
case 0:
PrintSubmenu1();
break;
}
}
if (estadoAbajoSubmenu == LOW) {
delay(time);
subopcionPrincipal++;
estado++;
if (subopcionPrincipal > 2) {
subopcionPrincipal = 0;
}
if (estado > 2) {
estado= 0;
}
switch (opcionPrincipal) {
case 0:
PrintSubmenu1();
break;
}
}
}
delay(time);
}