Skip to content

Instantly share code, notes, and snippets.

@DanNduati
Created February 5, 2018 06:37
Show Gist options
  • Save DanNduati/ef88c70f14ba7a97a0d84e3a0fb6dc16 to your computer and use it in GitHub Desktop.
Save DanNduati/ef88c70f14ba7a97a0d84e3a0fb6dc16 to your computer and use it in GitHub Desktop.
Arduino based security project
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Keypad.h>
#define buzzer 11
#define trigPin 9
#define echoPin 10
#if defined(ARDUINO) && ARDUINO >= 100
#define printByte(args) write(args);
#else
#define printByte(args) print(args,BYTE);
#endif
uint8_t heart[8] = {0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0};
uint8_t duck[8] = {0x0, 0xc, 0x1d, 0xf, 0xf, 0x6, 0x0};
long duration;
int distance, initialDistance, currentDistance, i;
int screenOffMsg = 0;
String password = "1234";
String tempPassword;
boolean activated = false; // State of the alarm
boolean isActivated;
boolean activateAlarm = false;
boolean alarmActivated = false;
boolean enteredPassword; // State of the entered password to stop the alarm
boolean passChangeMode = false;
boolean passChanged = false;
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keypressed;
//define the cymbols on the buttons of the keypads
char keyMap[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {1, 2, 3, 4}; //Row pinouts of the keypad
byte colPins[COLS] = {5, 6, 7, 8}; //Column pinouts of the keypad
Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x27, 16, 2);// Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7)
void setup(){
//lcd.init();
lcd.begin();
lcd.backlight();
lcd.createChar(3, heart);
lcd.createChar(4, duck);
pinMode(buzzer, OUTPUT); // Set buzzer as an output
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
lcd.clear();
lcd.setCursor(0, 0);
lcd.printByte(3);
lcd.print("---Dan_chei---");
lcd.printByte(3);
lcd.setCursor(0, 1);
lcd.printByte(4);
lcd.print("--------------");
lcd.printByte(4);
delay(3000);
lcd.clear();
}
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; // 9 seconds count down before activating the alarm
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!");
initialDistance = getDistance();
activateAlarm = false;
alarmActivated = true;
}
if (alarmActivated == true) {
currentDistance = getDistance() + 10;
if ( currentDistance < initialDistance) {
tone(buzzer, 1000); // Send 1KHz sound signal
lcd.clear();
enterPassword();
}
}
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') { //If A is pressed, activate the alarm
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 == '1' || keypressed == '2' || keypressed == '3' ||
keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
keypressed == '8' || 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 == '1' || keypressed == '2' || keypressed == '3' ||
keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
keypressed == '8' || 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 *** ");
lcd.setCursor(0, 1);
lcd.print("Pass>");
while (activated) {
keypressed = myKeypad.getKey();
if (keypressed != NO_KEY) {
if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
keypressed == '8' || 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 *** ");
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 *** ");
lcd.setCursor(0, 1);
lcd.print("Pass>");
}
}
}
}
// Custom function for the Ultrasonic sensor
long getDistance() {
//int i=10;
//while( i<=10 ) {
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance = duration * 0.034 / 2;
//sumDistance += distance;
//}
//int averageDistance= sumDistance/10;
return distance;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment