|
|
|
@ -1,15 +1,15 @@
|
|
|
|
|
#include "tone.h";
|
|
|
|
|
|
|
|
|
|
// Miscallaneous inputs/outputs
|
|
|
|
|
#define UNARMED_LED 2 // LED to light up when unarmed
|
|
|
|
|
#define ARMED_LED 13 // LED to light up when armed
|
|
|
|
|
#define ARM_UNARM_BUTTON 3 // button used to arm/unarm
|
|
|
|
|
#define SPKR 12
|
|
|
|
|
|
|
|
|
|
// Security points
|
|
|
|
|
const int door1 = 4;
|
|
|
|
|
const int door2 = 5;
|
|
|
|
|
|
|
|
|
|
// Miscallaneous inputs/outputs
|
|
|
|
|
const int unarmedLed = 2; // LED to light up when unarmed
|
|
|
|
|
const int armUnarm = 3; // button used to arm/unarm
|
|
|
|
|
const int spkr = 12;
|
|
|
|
|
const int armedLed = 13; // LED to light up when armed
|
|
|
|
|
|
|
|
|
|
// Configuration parameters
|
|
|
|
|
const String pass = "113"; // password
|
|
|
|
|
const int securityPoints = 2; // number of security points
|
|
|
|
@ -60,9 +60,9 @@ void setup() {
|
|
|
|
|
pinMode(door2, INPUT_PULLUP);
|
|
|
|
|
|
|
|
|
|
// Misc. inputs/outputs
|
|
|
|
|
pinMode(armUnarm, INPUT_PULLUP);
|
|
|
|
|
pinMode(unarmedLed, OUTPUT);
|
|
|
|
|
pinMode(armedLed, OUTPUT);
|
|
|
|
|
pinMode(ARM_UNARM_BUTTON, INPUT_PULLUP);
|
|
|
|
|
pinMode(UNARMED_LED, OUTPUT);
|
|
|
|
|
pinMode(ARMED_LED, OUTPUT);
|
|
|
|
|
|
|
|
|
|
Serial.println("Initialized.");
|
|
|
|
|
|
|
|
|
@ -70,21 +70,23 @@ void setup() {
|
|
|
|
|
|
|
|
|
|
if (isArmed == 1) {
|
|
|
|
|
Serial.println("Currently ARMED.");
|
|
|
|
|
digitalWrite(armedLed, HIGH);
|
|
|
|
|
digitalWrite(ARMED_LED, HIGH);
|
|
|
|
|
} else {
|
|
|
|
|
Serial.println("Currently UNARMED.");
|
|
|
|
|
digitalWrite(unarmedLed, HIGH);
|
|
|
|
|
digitalWrite(UNARMED_LED, HIGH);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Play an array of tones.
|
|
|
|
|
void playMelody(int melodyLength, int *melody, int *noteDur, int noteDelay) {
|
|
|
|
|
for (int i = 0; i < melodyLength; i++) {
|
|
|
|
|
tone(spkr, melody[i], noteDur[i]);
|
|
|
|
|
tone(SPKR, melody[i], noteDur[i]);
|
|
|
|
|
delay(noteDelay);
|
|
|
|
|
noTone(spkr);
|
|
|
|
|
noTone(SPKR);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Switches an LED's power on/off whenever called.
|
|
|
|
|
void flipLed(int ledPin, bool &state) {
|
|
|
|
|
if (state == LOW) {
|
|
|
|
|
state = HIGH;
|
|
|
|
@ -122,7 +124,7 @@ void loop() {
|
|
|
|
|
|
|
|
|
|
// - Arm/Unarm -
|
|
|
|
|
|
|
|
|
|
if ((digitalRead(armUnarm) == LOW || waitingForPass == 1) &&
|
|
|
|
|
if ((digitalRead(ARM_UNARM_BUTTON) == LOW || waitingForPass == 1) &&
|
|
|
|
|
unarmButtonDown == 0) {
|
|
|
|
|
if (isArmed == 1 || waitingForPass == 1) {
|
|
|
|
|
if (waitingForPass == 0) {
|
|
|
|
@ -158,7 +160,7 @@ void loop() {
|
|
|
|
|
// async blink unarm led every 250ms
|
|
|
|
|
if (currentMillis - unarmIntTracker >= 1000 && waitingForPass == 1) {
|
|
|
|
|
unarmIntTracker = currentMillis;
|
|
|
|
|
flipLed(unarmedLed, flipflopUnarmState);
|
|
|
|
|
flipLed(UNARMED_LED, flipflopUnarmState);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
isArmed = 1;
|
|
|
|
@ -171,7 +173,7 @@ void loop() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// - Button safety -
|
|
|
|
|
if (digitalRead(armUnarm) == HIGH && unarmButtonDown == 1) {
|
|
|
|
|
if (digitalRead(ARM_UNARM_BUTTON) == HIGH && unarmButtonDown == 1) {
|
|
|
|
|
unarmButtonDown = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -183,11 +185,11 @@ void loop() {
|
|
|
|
|
// - Activate unarmed/armed LEDs -
|
|
|
|
|
|
|
|
|
|
if (isArmed == 1 && waitingForPass == 0 && soundAlarm == 0) {
|
|
|
|
|
digitalWrite(armedLed, HIGH);
|
|
|
|
|
digitalWrite(unarmedLed, LOW);
|
|
|
|
|
digitalWrite(ARMED_LED, HIGH);
|
|
|
|
|
digitalWrite(UNARMED_LED, LOW);
|
|
|
|
|
} else if (waitingForPass == 0 && soundAlarm == 0) {
|
|
|
|
|
digitalWrite(unarmedLed, HIGH);
|
|
|
|
|
digitalWrite(armedLed, LOW);
|
|
|
|
|
digitalWrite(UNARMED_LED, HIGH);
|
|
|
|
|
digitalWrite(ARMED_LED, LOW);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// - Sound alarm -
|
|
|
|
@ -200,16 +202,16 @@ void loop() {
|
|
|
|
|
|
|
|
|
|
if (warnLevel < maxWarnLevel) { warnLevel = warnLevel + warnIncrement; };
|
|
|
|
|
|
|
|
|
|
flipLed(armedLed, flipflopAlarmState);
|
|
|
|
|
flipLed(ARMED_LED, flipflopAlarmState);
|
|
|
|
|
|
|
|
|
|
if (flipflopAlarmState == HIGH) {
|
|
|
|
|
tone(spkr, alarmNote);
|
|
|
|
|
tone(SPKR, alarmNote);
|
|
|
|
|
} else {
|
|
|
|
|
noTone(spkr);
|
|
|
|
|
noTone(SPKR);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
warnLevel = 0;
|
|
|
|
|
noTone(spkr);
|
|
|
|
|
noTone(SPKR);
|
|
|
|
|
}
|
|
|
|
|
}
|