#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const byte rows = 4;
const byte columns = 4;
String correct_pass = "123456";
int buttonPin = 2;
int unlockPin = 3;
int warningPin = 4;
char keys[rows][columns] =
{
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'},
};
byte rowPins[rows] = {5, 6, 7, 8};
byte columnPins[columns] = {9, 10, 11, 12};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, columnPins, rows, columns);
char read_character()
{
char key = keypad.getKey();
if(key) return key;
return '\0';
}
bool check_password(int size = 6)
{
String pass = "";
char key = '\0';
int count = 3;
int temp_size = size;
lcd.setCursor(5,1);
while(count)
{
while(temp_size)
{
key = read_character();
if(key != '\0' && key != 'A')
{
Serial.println(key);
lcd.print(key);
pass += String(key);
key = '\0';
temp_size--;
}
if(key == 'A')
{
temp_size = size;
pass = "";
lcd.setCursor(5,1);
lcd.print(" ");
lcd.setCursor(5,1);
Serial.println("Reset enter password...");
}
}
if(pass == correct_pass) break;
else
{
pass = "";
count--;
temp_size = size;
if(count)
{
Serial.println("Failed........");
Serial.println("You have " + String(count) + " times for enter password.");
Serial.println("You must wait 3 seconds.");
delay(3000);
Serial.println("----------------------------------------------------");
Serial.println("Enter password agian.....");
lcd.setCursor(5,1);
lcd.print(" ");
lcd.setCursor(5,1);
}
}
}
if(count) return true;
return false;
}
void control_output(int pin)
{
for(int i=0;i<3;i++)
{
digitalWrite(pin, 1);
delay(500);
digitalWrite(pin, 0);
delay(500);
}
}
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
pinMode(buttonPin, INPUT);
pinMode(unlockPin, OUTPUT);
pinMode(warningPin, OUTPUT);
lcd.clear();
lcd.print("Start.");
delay(500);
lcd.clear();
lcd.print("Start..");
delay(500);
lcd.clear();
lcd.print("Start...");
delay(500);
lcd.clear();
lcd.print("Start....");
delay(500);
lcd.clear();
Serial.println("PRESS THE BUTTON IF YOU WANT TO UNLOCK........");
}
void loop() {
if(!digitalRead(buttonPin))
{
Serial.println("PRESS BUTTON");
while(!digitalRead(buttonPin))
{
Serial.println("Please release button.........");
delay(500);
}
Serial.println("RELEASE BUTTON");
Serial.println("Enter your password........");
lcd.setCursor(1,0);
lcd.print("ENTER PASSWORD");
if(check_password(6))
{
lcd.clear();
lcd.setCursor(5,0);//-----Unlock------
lcd.print("Unlock");
lcd.setCursor(4,1);//-----Success-----
lcd.print("Successs");
Serial.println("------------------------------------------------");
Serial.println("Unlock success...........");
Serial.println("------------------------------------------------");
control_output(unlockPin);
lcd.clear();
}
else
{
lcd.clear();
lcd.setCursor(5,0);//-----Unlock------
lcd.print("Unlock");
lcd.setCursor(5,1);//-----Failed-----
lcd.print("Failed");
Serial.println("------------------------------------------------");
Serial.println("Unlock failed...........");
Serial.println("------------------------------------------------");
control_output(warningPin);
lcd.clear();
}
Serial.println("PRESS THE BUTTON IF YOU WANT TO CONTINUE UNLOCKING...............");
}
delay(100);
}