#include <Bounce2.h>
// Pin a la que está conectado el interruptor, GPIO19
const unsigned int PIN_BOTON = 19;
// Pin a la que está conectado el LED, GPIO16
const unsigned int PIN_LED = 16;
// Define los posibles estados del LED
typedef enum {
LED_APAGADO,
LED_ENCENDIDO
} estadoLed;
// Variable que guarda el estado del LED
estadoLed edoLed;
// Crea una instancia de la clase Bounce
Bounce debouncer = Bounce();
// Variables para el temporizador
unsigned long tiempoEncendido = 5000; // Tiempo en milisegundos para encender el LED (5 segundos)
unsigned long tiempoAnterior = 0;
bool encenderLEDProgramado = false;
void apagaLED();
void enciendeLED();
void setup() {
// Establece el pin PIN_LED (GPIO16) como salida.
pinMode(PIN_LED, OUTPUT);
// Establece el pin PIN_BOTON (GPIO19) como entrada.
pinMode(PIN_BOTON, INPUT);
// Establece el interruptor de botón al que se le eliminará el ruido
debouncer.attach(PIN_BOTON);
// Establece el intervalo (en ms) de espera para eliminar el ruido
debouncer.interval(5);
// Establece el estado inicial del LED
apagaLED();
}
void loop() {
// Actualiza el valor de la instancia del objeto Bounce.
debouncer.update();
// Obtén el estado del interruptor (HIGH o LOW)
int valor = debouncer.read();
// Controla el temporizador para encender el LED
if (!encenderLEDProgramado) {
// Si el LED no está programado para encenderse, programar el encendido
tiempoAnterior = millis();
encenderLEDProgramado = true;
}
// Verifica si ha pasado el tiempo programado
if (encenderLEDProgramado && (millis() - tiempoAnterior >= tiempoEncendido)) {
enciendeLED();
encenderLEDProgramado = false; // Resetear la programación
}
// Apagar el LED si el botón está presionado
if (valor == HIGH) {
apagaLED();
}
}
/**
* Esta función apaga el LED conectado al pin 16.
* También actualiza la variable edoLed al valor LED_APAGADO.
*/
void apagaLED() {
// Apaga el LED
digitalWrite(PIN_LED, LOW);
// Actualiza la variable que guarda el estado del LED
edoLed = LED_APAGADO;
}
/**
* Esta función enciende el LED conectado al pin 16.
* También actualiza la variable que guarda el estado del LED
*/
void enciendeLED() {
// Enciende el LED
digitalWrite(PIN_LED, HIGH);
// Actualiza la variable que guarda el estado del LED
edoLed = LED_ENCENDIDO;
}