#include <Arduino.h>
#include <Stepper.h>
#include <Tone.h>
const int pirPin = 2; // PIR sensor input pin
const int ledSensor = 13; // LED indicator sensor detectie
const int ledSlaapkamer = 6; // Slaapkamer LED
const int ledLiving = 5; // Living room LED
const int ledTrap = 3; // Trap LED
const int alarmPin = 7; // Alarm status indicator
long alarmTime = 0;
const int buzzerPin = 7;
const int interval = 300;
long previousMillis = 0;
// Hond variabelen
int blaftonen[][2] = {
{400, 150}, {600, 100}, {550, 200},
{450, 150}, {700, 120}, {500, 180},
{420, 160}, {680, 110}, {530, 190}
};
const int aantalTonen = 9;
int toonIndex = 0;
long vorigeMillis = 0;
bool alarmActief = false; // Alarm status
unsigned long startTime = 0;
bool alarmActive = false;
int state = 0;
const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
Tone buzzer;
void setup() {
pinMode(pirPin, INPUT);
pinMode(ledSensor, OUTPUT);
pinMode(ledSlaapkamer, OUTPUT);
pinMode(ledLiving, OUTPUT);
pinMode(ledTrap, OUTPUT);
pinMode(alarmPin, OUTPUT);
myStepper.setSpeed(30);
buzzer.begin(buzzerPin);
Serial.begin(9600);
}
void loop() {
int pirState = digitalRead(pirPin);
// Serial.println(pirState);
switch (state) {
case 0:
if (pirState == HIGH) {
digitalWrite(ledSensor, HIGH);
startTime = millis();
state = 1;
blaf();
Serial.println("blaf 0");
Serial.println("Rolluiken sluiten");
for (int i = 0; i < stepsPerRevolution; i++) { // rolluiken naar beneden traag
myStepper.step(1);
//delay(10);
}
Serial.println("🚨 Alarm gestart!");
}
break;
case 1:
if (millis() - startTime >= 200) {
digitalWrite(ledSlaapkamer, HIGH);
state = 2;
startTime = millis();
//for (int i = 0; i < 3; i++) { // Hond blaft
blaf();
Serial.println("blaf 1");
Serial.println("Slaapkamer LED ON");
}
break;
case 2:
if (millis() - startTime >= 400) {
digitalWrite(ledLiving, HIGH);
state = 3;
startTime = millis();
blaf();
Serial.println("blaf 2");
Serial.println("Living LED ON");
}
break;
case 3:
if (millis() - startTime >= 600) {
digitalWrite(ledTrap, HIGH);
state = 4;
startTime = millis();
blaf();
Serial.println("blaf 3");
Serial.println("Trap LED ON");
}
break;
case 4:
blaf();
if (millis() - startTime >= 5000) {
Serial.println("blaf 4");
state = 5;
}
break;
case 5:
if (pirState == LOW) {
digitalWrite(alarmPin, LOW);
digitalWrite(ledSensor, LOW);
digitalWrite(ledSlaapkamer, LOW);
digitalWrite(ledLiving, LOW);
digitalWrite(ledTrap, LOW);
myStepper.step(-stepsPerRevolution);
alarmActive = false;
state = 0;
Serial.println("✅ Alarm reset!");;
}
break;
}
}
void blaf() {
//Serial.println("Hond blaft");
long currentMillis = millis();
int blaftonen[][2] = {
{400, 150}, {600, 100}, {550, 200}, // Eerste blaf
{450, 150}, {700, 120}, {500, 180}, // tweede blaf
{420, 160}, {680, 110}, {530, 190} // derde blaf
};
for (int i = 0; i < 9; i++) {
buzzer.play(blaftonen[i][0]);
delay(blaftonen[i][1]);
buzzer.stop();
delay(50);
}
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis; // Update time
}
}Buiten
Sensor
Blaffende
Hond
Slaap
kamer
Trap
Living
Sensor