// Definición de pines
const int PIR_PIN = 2;
const int BUZZER_PIN = 3;
const int RED_PIN = 9;
const int GREEN_PIN = 10;
const int BLUE_PIN = 11;
// Variables de estado
bool motionDetected = false;
unsigned long lastMotionTime = 0;
const unsigned long timeout = 3000;
// Definición de tonos
const int toneHigh = 1000; // Tono alto
const int toneLow = 500; // Tono bajo
void setup() {
pinMode(PIR_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
Serial.begin(9600);
deactivateAlarm();
}
void loop() {
motionDetected = digitalRead(PIR_PIN);
if (motionDetected) {
lastMotionTime = millis();
activateAlarm();
} else if (millis() - lastMotionTime < timeout) {
// No se hace nada, la alarma se mantiene desactivada
} else {
deactivateAlarm();
}
}
void activateAlarm() {
for (int i = 0; i < 3; i++) {
activateLED(RED_PIN, toneHigh);
activateLED(GREEN_PIN, toneLow);
activateLED(BLUE_PIN, 0); // Sin sonido
}
}
void activateLED(int pin, int toneValue) {
digitalWrite(pin, HIGH);
if (toneValue > 0) {
tone(BUZZER_PIN, toneValue);
}
delay(500);
digitalWrite(pin, LOW);
noTone(BUZZER_PIN); // Asegurarse de que el buzzer esté apagado
}
void deactivateAlarm() {
noTone(BUZZER_PIN);
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
}