// Arduino Security System
// Made by: Vasco2020
#include <Keypad.h>
#include <LiquidCrystal.h>
//Pin Assignment
const int BUZZER = 13; //Change Buzzer Pin
const int GREEN_LED = 12; //Change Green LED (Dissarmed indicator) Pin
const int RED_LED = 11; //Change Red LED (Armed Indicator) Pin
const int MOTION_SENSOR = 10; //Change Trigger (PIR Motion) Pin
//Alarm Stuf
String PASSCODE = ""; //What PIN Should be used to disarm the alarm
int COUNTDOWN_TIME = 0;
//LCD Stuff
LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
//Keypad Stuff
const uint8_t ROWS = 4;
const uint8_t COLS = 4;
char keys[ROWS][COLS] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
uint8_t rowPins[COLS] = { 3, 2, A4, A5 }; // Pins connected to R1, R2, R3, R4
uint8_t colPins[ROWS] = { A3, A2, A1, A0 }; // Pins connected to C1, C2, C3, C4
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
//Functions
void Credits() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alarm Made By: ");
delay(1000);
lcd.setCursor(0, 1);
lcd.print("Vasco Estevao ");
delay(1000);
lcd.setCursor(0, 0);
lcd.print("Vasco Estevao ");
lcd.setCursor(0, 1);
lcd.print("Mika Duttlinger ");
delay(1000);
lcd.setCursor(0, 0);
lcd.print("Mika Duttlinger ");
lcd.setCursor(0, 1);
lcd.print("Rodrigo Melo ");
delay(1000);
lcd.setCursor(0, 0);
lcd.print("Rodrigo Melo ");
lcd.setCursor(0, 1);
lcd.print("Rodrigo Miranda ");
delay(1000);
lcd.setCursor(0, 0);
lcd.print("Rodrigo Miranda ");
lcd.setCursor(0, 1);
lcd.print("Sara Santos ");
delay(1000);
lcd.setCursor(0, 0);
lcd.print("Sara Santos ");
lcd.setCursor(0, 1);
lcd.print("Paulo Melo ");
delay(1000);
lcd.setCursor(0, 0);
lcd.print("Paulo Melo ");
lcd.setCursor(0, 1);
lcd.print(" ");
delay(1000);
lcd.clear();
delay(500);
lcd.setCursor(0, 0);
}
void SetCode() {
while (true) {
String keypadcode = ""; // Initialize an empty string
lcd.setCursor(0, 0);
lcd.clear();
lcd.print("----Set Code----");
lcd.setCursor(0, 1);
lcd.print("Code:____ ");
for (int i = 0 ; i <= 3; i++) {
keypadcode += keypad.waitForKey();
lcd.setCursor(0, 1);
lcd.print("Code:" + keypadcode);
delay(50);
}
delay(500);
lcd.setCursor(0, 0);
lcd.print("---Confirm: A---");
if (keypad.waitForKey() == 'A') {
PASSCODE = keypadcode;
Serial.println("New Code: " + keypadcode);
lcd.clear();
return;
}
delay(100);
}
}
void SetCountDown() {
while (true) {
String countdownset = ""; // Initialize an empty string
lcd.setCursor(0, 0);
lcd.clear();
lcd.print("--SetCountdown--");
lcd.setCursor(0, 1);
lcd.print("Countdown:__ ");
for (int i = 0 ; i <= 1 ; i++) {
countdownset += keypad.waitForKey();
lcd.setCursor(0, 1);
lcd.print("Countdown:" + countdownset);
delay(50);
}
// Convert the string to an integer
int countdownTime = countdownset.toInt();
// Check if the conversion was successful
if (countdownTime == 0 && countdownset.charAt(0) != '0') {
// Conversion failed, print error message and restart the function
lcd.setCursor(0, 1);
lcd.print("Countdown:" + countdownset + " ERROR");
delay(1000);
} else {
lcd.setCursor(0, 0);
lcd.print("---Confirm: A---");
if (keypad.waitForKey() == 'A') {
COUNTDOWN_TIME = countdownTime;
Serial.println("Countdown Time: " + countdownset);
lcd.clear();
return;
}
}
}
}
void ModifySettings() {
Serial.println("Modify Settings Mode...");
while (true) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("-ModifySettings-");
lcd.setCursor(0, 1);
lcd.print("A: PIN B: Count");
char modifychoise = keypad.waitForKey();
if (modifychoise == 'A') {
SetCode();
}
if (modifychoise == 'B') {
SetCountDown();
}
if (modifychoise == 'D') {
return;
}
}
}
bool CheckCode(String title) {
String keypadcode = ""; // Initialize an empty string
lcd.setCursor(0, 0);
lcd.clear();
lcd.print(title);
lcd.setCursor(0, 1);
lcd.print("PIN:____ ");
for (int i = 0; i <= 3; i++) {
keypadcode += keypad.waitForKey();
lcd.setCursor(0, 1);
lcd.print("PIN:" + keypadcode);
delay(50);
}
Serial.println(keypadcode);
if (keypadcode == PASSCODE) {
return true;
}
return false;
}
void arming() {
digitalWrite(BUZZER, HIGH);
lcd.setCursor(0, 0);
lcd.clear();
lcd.print("Arming Alarm... ");
lcd.setCursor(0, 1);
delay(500);
digitalWrite(BUZZER, LOW);
delay(1000);
int i = COUNTDOWN_TIME;
while (i >= 6) {
lcd.setCursor(0, 1);
lcd.print("Time: ");
lcd.print(i);
lcd.print("s ");
digitalWrite(BUZZER, HIGH);
delay(100);
digitalWrite(BUZZER, LOW);
delay(900);
i--;
};
while (i >= 0) {
lcd.setCursor(0, 1);
lcd.print("Time: ");
lcd.print(i);
lcd.print("s ");
digitalWrite(BUZZER, HIGH);
delay(50);
digitalWrite(BUZZER, LOW);
delay(50);
digitalWrite(BUZZER, HIGH);
delay(50);
digitalWrite(BUZZER, LOW);
delay(850);
i--;
};
digitalWrite(BUZZER, HIGH);
lcd.setCursor(0, 0);
lcd.clear();
lcd.print("Countdown ");
lcd.setCursor(0, 1);
lcd.print("Complete. ");
delay(500);
digitalWrite(BUZZER, LOW);
delay(500);
digitalWrite(BUZZER, LOW);
digitalWrite(RED_LED, HIGH);
digitalWrite(GREEN_LED, LOW);
while (digitalRead(MOTION_SENSOR)) {
lcd.setCursor(0, 0);
lcd.print("Prepairing ");
lcd.setCursor(0, 1);
lcd.print("Motion Sensor ");
delay(100);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alarm Armed. ");
delay(250);
};
void beta_testing() {
lcd.setCursor(0, 0);
lcd.print("Entering Beta ");
lcd.setCursor(0, 1);
lcd.print("Testing Mode... ");
for (int i = 3; i >= 0; i--) {
digitalWrite(BUZZER, HIGH);
delay(500);
digitalWrite(BUZZER, LOW);
delay(250);
};
while (digitalRead(MOTION_SENSOR)) {
lcd.setCursor(0, 0);
lcd.print("Prepairing ");
lcd.setCursor(0, 1);
lcd.print("Motion Sensor ");
delay(100);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("BETA TESTING: ON ");
digitalWrite(RED_LED, HIGH);
digitalWrite(GREEN_LED, LOW);
};
void disarm() {
lcd.setCursor(0, 0);
lcd.clear();
lcd.print("Alarm Disarmed. ");
digitalWrite(BUZZER, LOW);
digitalWrite(RED_LED, LOW);
digitalWrite(GREEN_LED, HIGH);
delay(1000);
};
void startup_sequence() {
// Startup Conection Indicator LEDs
digitalWrite(BUZZER, LOW);
digitalWrite(RED_LED, LOW);
digitalWrite(GREEN_LED, LOW);
delay(750);
lcd.setCursor(0, 0);
lcd.print("Arduino Security");
lcd.setCursor(0, 1);
lcd.print("System v2.0");
digitalWrite(BUZZER, HIGH);
digitalWrite(RED_LED, HIGH);
digitalWrite(GREEN_LED, HIGH);
delay(1000);
digitalWrite(BUZZER, LOW);
digitalWrite(RED_LED, LOW);
digitalWrite(GREEN_LED, LOW);
delay(500);
//Credits
Credits();
lcd.print("Booting up ... ");
lcd.setCursor(0, 1);
lcd.print("Please Wait ... ");
delay(250);
digitalWrite(BUZZER, HIGH);
delay(100);
digitalWrite(BUZZER, LOW);
delay(500);
digitalWrite(GREEN_LED, HIGH);
delay(100);
digitalWrite(GREEN_LED, LOW);
delay(500);
digitalWrite(RED_LED, HIGH);
delay(100);
digitalWrite(RED_LED, LOW);
delay(250);
lcd.setCursor(0, 0);
lcd.clear();
lcd.print("... ");
digitalWrite(BUZZER, HIGH);
digitalWrite(RED_LED, HIGH);
digitalWrite(GREEN_LED, HIGH);
delay(250);
digitalWrite(BUZZER, LOW);
digitalWrite(RED_LED, LOW);
digitalWrite(GREEN_LED, LOW);
delay(250);
lcd.setCursor(0, 0);
lcd.clear();
lcd.print("Boot up Complete");
SetCode();
SetCountDown();
digitalWrite(GREEN_LED, HIGH);
lcd.setCursor(0, 0);
lcd.clear();
lcd.print("-----Online-----");
for (int i = 3; i >= 0; i--) {
digitalWrite(BUZZER, HIGH);
delay(50);
digitalWrite(BUZZER, LOW);
delay(50);
};
};
void setup() {
Serial.begin(9600);
pinMode(BUZZER, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(MOTION_SENSOR, INPUT);
lcd.begin(16, 2); //Start and Set display Resolution
digitalWrite(0, HIGH);
startup_sequence();
}
void loop() {
if (digitalRead(GREEN_LED) && digitalRead(RED_LED)) { //Safe Guard
lcd.setCursor(0, 0);
lcd.clear();
lcd.print("-----ERROR!-----");
delay(1000);
lcd.setCursor(0, 1);
lcd.print("Rebooting ... ");
delay(2500);
startup_sequence();
};
if (digitalRead(GREEN_LED)) {
lcd.setCursor(0, 0);
lcd.print("-----Online-----");
lcd.setCursor(0, 1);
lcd.print("A: Arm Alarm ");
};
if (digitalRead(MOTION_SENSOR) && digitalRead(RED_LED) && !digitalRead(BUZZER)) {
Serial.println("ALARM TRIGGERED!");
Serial.println("");
digitalWrite(BUZZER, HIGH);
delay(50);
while (digitalRead(BUZZER)) {
if (CheckCode("-----Disarm-----")) {
disarm();
Serial.println("CODE INFO: CORRECT CODE");
Serial.println("");
delay(750);
} else {
lcd.setCursor(9, 1);
lcd.print("ERROR ");
Serial.println("CODE ERROR: WRONGCODE");
delay(500);
}
}
};
char key = keypad.getKey();
if (key == 'A' && digitalRead(GREEN_LED)) { //Arm the Alarm
Serial.println("Arming Alarm from Keypad...");
arming();
Serial.println("Alarm Armed from Keypad.");
Serial.println("");
}
if (key == 'B' && digitalRead(GREEN_LED)) { //BETA MODE: Testing the Alarm Without having to wait for too long
Serial.println("Entering Beta Testing Mode from Keypad...");
beta_testing();
Serial.println("Beta Testing Mode Activated from Keypad.");
Serial.println("");
}
if (key == 'C' && digitalRead(GREEN_LED)) {
Credits();
}
if (key == 'D' && digitalRead(GREEN_LED)) {
ModifySettings();
}
}