#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include "Password.h"
#define buzzer 13
#define redled 11
#define greenled 10
Servo servo;
LiquidCrystal_I2C lcd(0x27, 16, 2);
String newPasswordString; //hold the new password
char newPassword[6]; //charater string of newPasswordString
byte a = 5;
bool value = true;
Password password = Password("1234"); //Enter your password
byte maxPasswordLength = 6;
byte currentPasswordLength = 0;
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Four columns
char keys[ROWS][COLS] = {{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}};
byte rowPins[ROWS] = {8, 7, 6, 9};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup()
{
Serial.begin(9600);
pinMode(buzzer, OUTPUT);
pinMode(redled , OUTPUT);
pinMode(greenled, OUTPUT);
servo.attach(12);
servo.write(50);
lcd.init();
lcd.backlight();
lcd.setCursor(3, 0);
lcd.print("WELCOME TO");
lcd.setCursor(0, 1);
lcd.print("DOOR LOCK SYSTEM");
delay(3000);
lcd.clear();
}
void loop()
{
lcd.setCursor(1, 0);
lcd.print("ENTER PASSWORD");
char key = keypad.getKey();
if (key != NO_KEY)
{
delay(60);
if (key == 'C')
{
resetPassword();
}
else if (key == '#')
{
if (value == true)
{
doorlocked();
value = false;
}
else if (value == false)
{
dooropen();
value = true;
}
}
else
{
processNumberKey(key);
}
}
}
void processNumberKey(char key)
{
lcd.setCursor(a, 1);
lcd.print("*");
a++;
if (a == 11)
{
a = 5;
}
currentPasswordLength++;
password.append(key);
if (currentPasswordLength == maxPasswordLength)
{
doorlocked();
dooropen();
}
}
void dooropen() {
if (password.evaluate())
{
lcd.setCursor(0, 0);
lcd.print("CORRECT PASSWORD");
lcd.setCursor(0, 1);
lcd.print("OPEN THE DOOR...");
digitalWrite(greenled, HIGH);
tone(buzzer, 262);
delay(500);
digitalWrite(greenled, LOW);
noTone(buzzer);
servo.write(50);
delay(2000);
lcd.clear();
a = 5;
}
else
{
lcd.setCursor(0, 0);
lcd.print("WRONG PASSWORD!");
lcd.setCursor(0, 1);
lcd.print("PLEASE TRY AGAIN");
digitalWrite(redled, HIGH);
tone(buzzer, 262);
delay(200);
digitalWrite(redled, LOW);
noTone(buzzer);
delay(200);
digitalWrite(redled, HIGH);
tone(buzzer, 262);
delay(200);
digitalWrite(redled, LOW);
noTone(buzzer);
delay(200);
digitalWrite(redled, HIGH);
tone(buzzer, 262);
delay(200);
digitalWrite(redled, LOW);
noTone(buzzer);
delay(2000);
lcd.clear();
a = 5;
}
resetPassword();
}
void doorlocked()
{
if (password.evaluate())
{
lcd.setCursor(0, 0);
lcd.print("CORRECT PASSWORD");
lcd.setCursor(2, 1);
lcd.print("DOOR LOCKED");
digitalWrite(greenled, HIGH);
tone(buzzer, 262);
delay(500);
digitalWrite(greenled, LOW);
noTone(buzzer);
servo.write(110);
delay(2000);
lcd.clear();
a = 5;
}
else
{
lcd.setCursor(0, 0);
lcd.print("WRONG PASSWORD!");
lcd.setCursor(0, 1);
lcd.print("PLEASE TRY AGAIN");
digitalWrite(redled, HIGH);
tone(buzzer, 262);
delay(200);
digitalWrite(redled, LOW);
noTone(buzzer);
delay(200);
digitalWrite(redled, HIGH);
tone(buzzer, 262);
delay(200);
digitalWrite(redled, LOW);
noTone(buzzer);
delay(200);
digitalWrite(redled, HIGH);
tone(buzzer, 262);
delay(200);
digitalWrite(redled, LOW);
noTone(buzzer);
delay(2000);
lcd.clear();
a = 5;
}
resetPassword();
}
void resetPassword() {
password.reset();
currentPasswordLength = 0;
lcd.clear();
a = 5;
}