#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int PulsadorPin1 = 10; // Botón para 1 minuto
const int PulsadorPin2 = 11; // Botón para 2 minutos
const int PulsadorPin3 = 12; // Botón para 3 minutos
const int PulsadorPin4 = 13; // Botón para 4 minutos
const int PulsadorPin5 = 14; // Botón para 5 minutos
const int PotenciaPocaPin = 6; // Botón para potencia baja
const int PotenciaMediaPin = 7; // Botón para potencia media
const int PotenciaAltaPin = 8; // Botón para potencia alta
const int RelePin = 9;
const int LedPin = 2; // Pin del LED que se encenderá al acabar el tiempo
int ReleActivo = 0; // Variable para controlar el estado del relé
unsigned long tiempoInicio = 0; // Variable para almacenar el tiempo de inicio
unsigned long duracion = 0; // Variable para almacenar la duración en milisegundos
String potenciaSeleccionada = ""; // Variable para almacenar la potencia seleccionada
// Configurar la pantalla LCD con dirección I2C 0x27 y tamaño 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
// Inicializar el LCD
lcd.init();
lcd.backlight(); // Encender la luz de fondo de la pantalla
// Mostrar el mensaje inicial para seleccionar potencia
lcd.setCursor(4, 0);
lcd.print("Escoja ");
lcd.setCursor(4, 1);
lcd.print("potencia");
// Configurar los pines de los botones, el relé y el LED
pinMode(RelePin, OUTPUT);
pinMode(LedPin, OUTPUT); // Configurar el pin del LED como salida
pinMode(PulsadorPin1, INPUT);
pinMode(PulsadorPin2, INPUT);
pinMode(PulsadorPin3, INPUT);
pinMode(PulsadorPin4, INPUT);
pinMode(PulsadorPin5, INPUT);
pinMode(PotenciaPocaPin, INPUT);
pinMode(PotenciaMediaPin, INPUT);
pinMode(PotenciaAltaPin, INPUT);
}
void loop() {
// Selección de potencia
if (digitalRead(PotenciaPocaPin) == HIGH) {
potenciaSeleccionada = "Poca";
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Potencia: Poca");
lcd.setCursor(0, 1);
lcd.print("Seleccione tiempo");
}
else if (digitalRead(PotenciaMediaPin) == HIGH) {
potenciaSeleccionada = "Media";
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Potencia: Media");
lcd.setCursor(0, 1);
lcd.print("Seleccione tiempo");
}
else if (digitalRead(PotenciaAltaPin) == HIGH) {
potenciaSeleccionada = "Alta";
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Potencia: Alta");
lcd.setCursor(0, 1);
lcd.print("Seleccione tiempo");
}
// Selección de tiempo y activación del relé según el botón presionado
if (digitalRead(PulsadorPin1) == HIGH && ReleActivo == 0 && potenciaSeleccionada != "") {
activarRele(60000, "1 minuto");
}
else if (digitalRead(PulsadorPin2) == HIGH && ReleActivo == 0 && potenciaSeleccionada != "") {
activarRele(120000, "2 minutos");
}
else if (digitalRead(PulsadorPin3) == HIGH && ReleActivo == 0 && potenciaSeleccionada != "") {
activarRele(180000, "3 minutos");
}
else if (digitalRead(PulsadorPin4) == HIGH && ReleActivo == 0 && potenciaSeleccionada != "") {
activarRele(240000, "4 minutos");
}
else if (digitalRead(PulsadorPin5) == HIGH && ReleActivo == 0 && potenciaSeleccionada != "") {
activarRele(300000, "5 minutos");
}
// Desactivar el relé cuando pase el tiempo y encender el LED
if (ReleActivo == 1 && millis() - tiempoInicio >= duracion) {
digitalWrite(RelePin, LOW); // Apago el relé después del tiempo especificado
Serial.println("Apagado el relé");
ReleActivo = 0; // Reiniciar la variable de control
// Encender el LED indicando que el tiempo ha terminado
digitalWrite(LedPin, HIGH);
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("Tiempo fin");
lcd.setCursor(0, 1);
lcd.print("Pot: " + potenciaSeleccionada);
// Mantener el LED encendido durante un tiempo visible (3 segundos)
delay(3000);
digitalWrite(LedPin, LOW); // Apagar el LED
// Volver a la pantalla de selección de potencia
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("Escoja ");
lcd.setCursor(4, 1);
lcd.print("potencia");
}
delay(10); // Pequeño retraso para evitar lecturas erróneas
}
void activarRele(unsigned long tiempo, String tiempoTexto) {
digitalWrite(RelePin, HIGH); // Activo el relé
Serial.println("Activo el relé por " + tiempoTexto);
tiempoInicio = millis();
duracion = tiempo; // Duración en milisegundos
ReleActivo = 1;
// Mostrar el tiempo y la potencia seleccionada en la LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tiempo: " + tiempoTexto);
lcd.setCursor(0, 1);
lcd.print("Pot: " + potenciaSeleccionada);
}