#include <Keypad.h>
#include <EEPROM.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
Servo myservo;
LiquidCrystal_I2C lcd (0x27, 16, 2);
int servo_pos;
char new_pass[4], input_pass[4], eeprom_pass[4];
int i = 0;
//int j;
char key_def, key_pass;
char default_pass[4] = "1234"; //set the defaul password here
const byte row_count = 4;
const byte column_count = 4;
char keys4x4[row_count][column_count] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte row_pins[row_count] = {12, 11, 10, 9};
byte column_pins[column_count] = {8, 7, 6, 5};
Keypad myKeypad = Keypad(makeKeymap(keys4x4), row_pins, column_pins, row_count, column_count);
void setup()
{
lcd.backlight();
lcd.init();
myservo.attach(2);
myservo.write(90);
lcd.print("Welcome Home");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Press # To Set");
lcd.setCursor(0, 1);
lcd.print("Your Pass First");
}
void loop()
{
key_def = myKeypad.getKey();
switch (key_def){
case 'A':
lcd.backlight();
lcd.clear();
lcd.print("Enter Password:");
while(i < 4)
{
key_pass = myKeypad.getKey();
if (key_pass)
{
input_pass[i] = key_pass;
lcd.setCursor(i, 1);
lcd.print(key_pass);
i++;
}
key_pass = 0;
}
if (i == 4)
{
delay(200);
for (int j = 0; j < 4; j++)
eeprom_pass[j] = EEPROM.read(j);
if(!strncmp(input_pass, eeprom_pass, 4))
{
lcd.backlight();
lcd.clear();
lcd.print("Password Accepted");
delay(1000);
servoOpen();
//Write your logic for correct password
}
else
{
lcd.backlight();
lcd.clear();
lcd.print("Wrong Password!!");
lcd.setCursor(0, 1);
lcd.print("Please Try Again");
delay(1000);
lcd.clear();
lcd.print("Press A to");
lcd.setCursor(0, 1);
lcd.print("Try Again");
}
i = 0;
}
break;
case '#':
lcd.backlight();
lcd.clear();
lcd.print("Set Password");
delay(700);
setPass();
break;
case '*':
lcd.backlight();
lcd.clear();
lcd.print("Change Password");
delay(700);
changePass();
break;
}
}
void servoOpen(){
lcd.clear();
lcd.print("The Door Has");
lcd.setCursor(0, 1);
lcd.print("Been Opened");
for(servo_pos = 90; servo_pos <= 180; servo_pos += 10){
myservo.write(servo_pos);
delay(50);
}
delay(800);
lcd.clear();
lcd.print("The Door Will");
lcd.setCursor(0, 1);
lcd.print("Close in 3 Scnd");
delay(3000);
servoClose();
}
void servoClose(){
lcd.clear();
lcd.print("The Door Has");
lcd.setCursor(0, 1);
lcd.print("Been Closed");
for(servo_pos = 180; servo_pos >= 90; servo_pos -= 5){
myservo.write(servo_pos);
delay(50);
}
delay(2000);
lcd.clear();
lcd.print("Press A to Enter");
lcd.setCursor(0, 1);
lcd.print("Your Password");
delay(2000);
lcd.clear();
lcd.print("Press * to Change");
lcd.setCursor(0, 1);
lcd.print("Your Password");
}
void setPass()
{
int j = 0;
lcd.backlight();
lcd.clear();
lcd.print("Password:");
while (j < 4)
{
char key = myKeypad.getKey();
if (key)
{
new_pass[j] = key;
lcd.setCursor(j, 1);
lcd.print(key);
EEPROM.write(j, new_pass[j]);
j++;
}
}
lcd.backlight();
lcd.clear();
lcd.print("Password Updated...");
delay(2000);
lcd.clear();
lcd.print("Press A to Enter");
lcd.setCursor(0, 1);
lcd.print("Your Password");
}
/*void reset_password() {
strncpy(eeprom_pass, default_pass, 4);
for (int j = 0; j < 4; j++) {
EEPROM.write(j, default_pass[j]);
}
}*/
void changePass(){
int j = 0;
lcd.backlight();
lcd.clear();
lcd.print("Current Password:");
while (j < 4)
{
char key = myKeypad.getKey();
if (key)
{
input_pass[j] = key;
lcd.setCursor(j, 1);
lcd.print(key);
j++;
}
key = 0;
}
delay(500);
if ((strncmp(input_pass, eeprom_pass, 4)))
{
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Wrong Password!");
lcd.setCursor(0, 1);
lcd.print("Try Again!");
delay(1000);
key_def = 0;
changePass();
//change();
}
else
{
int j = 0;
lcd.backlight();
lcd.clear();
lcd.print("New Password:");
while (j < 4)
{
char key = myKeypad.getKey();
if (key)
{
new_pass[j] = key;
lcd.setCursor(j, 1);
lcd.print(key);
EEPROM.write(j, new_pass[j]);
j++;
}
}
lcd.backlight();
lcd.clear();
lcd.print("Password Updated...");
delay(2000);
lcd.clear();
lcd.print("Press A to Enter");
lcd.setCursor(0, 1);
lcd.print("Your Password");
}
}