#include <LiquidCrystal.h>
#include <Keypad.h>
#define buzzer 8
#define pirPin 9
#define RedLED 11
int screenOffMsg = 0;
String password = "1234";
String tempPassword;
boolean activated = false;
boolean isActivated;
boolean activateAlarm = false;
boolean alarmActivated = false;
boolean enteredPassword;
boolean passChangeMode = false;
boolean passChanged = false;
const byte ROWS = 4;
const byte COLS = 4;
char keypressed;
char keyMap[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {14, 15, 16, 17};
byte colPins[COLS] = {18, 19, 20, 21};
Keypad myKeypad = Keypad(makeKeymap(keyMap), rowPins, colPins, ROWS, COLS);
LiquidCrystal lcd(1, 2, 4, 5, 6, 7);
void setup() {
lcd.begin(16, 2);
pinMode(buzzer, OUTPUT);
pinMode(pirPin, INPUT);
pinMode(RedLED, OUTPUT);
}
void loop() {
if (activateAlarm) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alarm will be");
lcd.setCursor(0, 1);
lcd.print("activated in");
int countdown = 9;
while (countdown != 0) {
lcd.setCursor(13, 1);
lcd.print(countdown);
countdown--;
tone(buzzer, 700, 100);
delay(1000);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alarm Activated!");
activateAlarm = false;
alarmActivated = true;
}
if (alarmActivated) {
if (digitalRead(pirPin) == HIGH) {
tone(buzzer, 1000); //
digitalWrite(RedLED, HIGH);
lcd.clear();
enterPassword();
digitalWrite(RedLED, LOW);
}
}
if (!alarmActivated) {
if (screenOffMsg == 0) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("A - Activate");
lcd.setCursor(0, 1);
lcd.print("B - Change Pass");
screenOffMsg = 1;
}
keypressed = myKeypad.getKey();
if (keypressed == 'A') {
tone(buzzer, 1000, 200);
activateAlarm = true;
} else if (keypressed == 'B') {
lcd.clear();
int i = 1;
tone(buzzer, 2000, 100);
tempPassword = "";
lcd.setCursor(0, 0);
lcd.print("Current Password");
lcd.setCursor(0, 1);
lcd.print(">");
passChangeMode = true;
passChanged = true;
while (passChanged) {
keypressed = myKeypad.getKey();
if (keypressed != NO_KEY) {
if (keypressed >= '0' && keypressed <= '9') {
tempPassword += keypressed;
lcd.setCursor(i, 1);
lcd.print("*");
i++;
tone(buzzer, 2000, 100);
}
}
if (i > 5 || keypressed == '#') {
tempPassword = "";
i = 1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Current Password");
lcd.setCursor(0, 1);
lcd.print(">");
}
if (keypressed == '*') {
i = 1;
tone(buzzer, 2000, 100);
if (password == tempPassword) {
tempPassword = "";
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Set New Password");
lcd.setCursor(0, 1);
lcd.print(">");
while (passChangeMode) {
keypressed = myKeypad.getKey();
if (keypressed != NO_KEY) {
if (keypressed >= '0' && keypressed <= '9') {
tempPassword += keypressed;
lcd.setCursor(i, 1);
lcd.print("*");
i++;
tone(buzzer, 2000, 100);
}
}
if (i > 5 || keypressed == '#') {
tempPassword = "";
i = 1;
tone(buzzer, 2000, 100);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Set New Password");
lcd.setCursor(0, 1);
lcd.print(">");
}
if (keypressed == '*') {
i = 1;
tone(buzzer, 2000, 100);
password = tempPassword;
passChangeMode = false;
passChanged = false;
screenOffMsg = 0;
}
}
}
}
}
}
}
}
void enterPassword() {
int k = 5;
tempPassword = "";
activated = true;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alarm TRIGGERED!");
lcd.setCursor(0, 1);
lcd.print("Pass>");
while (activated) {
keypressed = myKeypad.getKey();
if (keypressed != NO_KEY) {
if (keypressed >= '0' && keypressed <= '9') {
tempPassword += keypressed;
lcd.setCursor(k, 1);
lcd.print("*");
k++;
}
}
if (k > 9 || keypressed == '#') {
tempPassword = "";
k = 5;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alarm TRIGGERED!");
lcd.setCursor(0, 1);
lcd.print("Pass>");
}
if (keypressed == '*') {
if (tempPassword == password) {
activated = false;
alarmActivated = false;
noTone(buzzer);
screenOffMsg = 0;
} else if (tempPassword != password) {
lcd.setCursor(0, 1);
lcd.print("Wrong! Try Again");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alarm TRIGGERED!");
lcd.setCursor(0, 1);
lcd.print("Pass>");
}
}
}
}
void motionDetected() {
tone(buzzer, 1000);
lcd.clear();
enterPassword();
}
void motionStopped() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("A - Activate");
lcd.setCursor(0, 1);
lcd.print("B - Change Pass");
screenOffMsg = 1;
}