// Incluye las bibliotecas necesarias
#include <Arduino.h>
// Define los pines para los pulsadores y la sirena
const int pinLEDAlarma = 2; // LED para indicar el estado de la alarma
const int pinLEDSensor = 0; // LED para indicar el estado del sensor
const int pinArmar = 4; // Pulsador para armar/desarmar el sensor
const int pinActivar = 16; // Pulsador para activar/desactivar la sirena
const int pinSensor = 17; // Sensor PIR
const int pinSirena = 5; // Buzzer o altavoz para la sirena
// Variables para el estado de la alarma y el sensor
bool alarmaActivada = false;
bool sensorArmado = false;
bool disparoPendiente = false;
// Variables para el estado anterior de los pulsadores y el sensor PIR
bool lastStateArmar = HIGH;
bool lastStateActivar = HIGH;
bool lastStateSensor = LOW;
void setup() {
// Inicializa los pines como entradas o salidas según sea necesario
pinMode(pinArmar, INPUT);
pinMode(pinActivar, INPUT);
pinMode(pinSensor, INPUT);
pinMode(pinSirena, OUTPUT);
pinMode(pinLEDAlarma, OUTPUT);
pinMode(pinLEDSensor, OUTPUT);
// Utiliza resistencias externas de pull-up
digitalWrite(pinArmar, HIGH);
digitalWrite(pinActivar, HIGH);
// Inicializa el estado inicial de la alarma y el sensor
digitalWrite(pinLEDAlarma, LOW);
digitalWrite(pinLEDSensor, LOW);
}
void loop() {
// Lee el estado de los pulsadores y el sensor PIR
bool armar = digitalRead(pinArmar) == LOW;
bool activar = digitalRead(pinActivar) == LOW;
bool sensor = digitalRead(pinSensor) == HIGH;
bool disparo = sensor && sensorArmado;
// Actualiza el estado del sensor
if (sensor != lastStateSensor) {
if (sensor && sensorArmado) {
disparoPendiente = true;
}
lastStateSensor = sensor;
}
// Actualiza el estado del sensor al armar/desarmar
if (armar != lastStateArmar) {
sensorArmado = !sensorArmado;
digitalWrite(pinLEDSensor, sensorArmado ? HIGH : LOW);
}
// Actualiza el estado de la alarma
if (activar != lastStateActivar) {
alarmaActivada = !alarmaActivada;
digitalWrite(pinLEDAlarma, alarmaActivada ? HIGH : LOW);
}
// Activa/desactiva la sirena según el estado de la alarma y el disparo pendiente
digitalWrite(pinSirena, alarmaActivada ? (disparoPendiente ? HIGH : LOW) : LOW);
// Realiza las acciones necesarias al atender un disparo pendiente
if (disparoPendiente && !disparo) {
// Puedes agregar aquí las acciones a realizar al atender un disparo
// Por ejemplo, borrar el evento, log, etc.
disparoPendiente = false;
}
// Actualiza el estado anterior de los pulsadores y el sensor PIR
lastStateArmar = armar;
lastStateActivar = activar;
// Puedes agregar aquí otras acciones según sea necesario
}