#include <Arduino.h>
// Declaración de pines
const int pinPulsador = 4; // Pin para el botón
const int pinLed = 2; // Pin para el LED
const int pinPIR = 15; // Pin del sensor PIR
const int pinRelevador = 5; // Pin del relevador
// Variables de estado
bool ledEncendido = false; // Estado del LED (inicialmente apagado)
bool relevadorEncendido = false; // Estado del relevador (inicialmente apagado)
bool movimientoDetectada = false; // Estado de detección de movimiento (inicialmente desactivado)
unsigned long tiempoMovimiento = 0; // Tiempo de la última detección de movimiento
void setup() {
// Configuración de pines como entradas o salidas
pinMode(pinPulsador, INPUT);
pinMode(pinLed, OUTPUT);
pinMode(pinPIR, INPUT);
pinMode(pinRelevador, OUTPUT);
// Apaga el LED y el relevador al inicio
digitalWrite(pinLed, LOW);
digitalWrite(pinRelevador, LOW);
}
void loop() {
// Lee el estado del pulsador
bool estadoPulsador = digitalRead(pinPulsador);
// Declaración de variables de estado
bool estadoBoton = estadoPulsador; // Variable para almacenar el estado del botón
bool estadoPIR = digitalRead(pinPIR); // Variable para almacenar el estado del sensor PIR
// Actualiza la variable de estado del botón
estadoBoton = estadoPulsador;
// Estructura switch-case para controlar el comportamiento
switch (estadoBoton) {
case LOW: // Botón no presionado
// Verifica si se detecta movimiento y no se ha detectado previamente
if (estadoPIR == HIGH && !movimientoDetectada) {
// Guarda el tiempo actual
tiempoMovimiento = millis();
movimientoDetectada = true; // Actualiza el estado de detección
}
// Verifica si han pasado al menos 3 segundos desde la detección de movimiento
if (movimientoDetectada && millis() - tiempoMovimiento >= 3000) {
digitalWrite(pinLed, HIGH); // Enciende el LED
ledEncendido = true; // Actualiza el estado del LED
digitalWrite(pinRelevador, HIGH); // Enciende el relevador
relevadorEncendido = true; // Actualiza el estado del relevador
}
break;
case HIGH: // Botón presionado
digitalWrite(pinLed, LOW); // Apaga el LED
ledEncendido = false; // Actualiza el estado del LED
digitalWrite(pinRelevador, LOW); // Apaga el relevador
relevadorEncendido = false; // Actualiza el estado del relevador
movimientoDetectada = false; // Reinicia el estado de detección de movimiento
break;
}
}