#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
char password[4] = {'1','2','3','4'};
/* Display */
LiquidCrystal_I2C lcd(0x27, 16, 2);
/* Keypad */
byte rowPins[4] = {5, 4, 3, 2};
byte colPins[3] = {A3, A2, A1};
char keys[4][3] = {
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'.', '0', '='}
};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, 4, 3);
int lock = 6;
int num = 0;
char temp[4] = {};
void showSpalshScreen() {
  lcd.setCursor(4, 0);
  lcd.print("Digital");
  lcd.setCursor(3, 1);
  String message = "Door Lock";
  for (byte i = 0; i < message.length(); i++) {
    lcd.print(message[i]);
    delay(50);
  }
  delay(1000);
}
void updateCursor() {
  if (millis() / 250 % 2 == 0 ) {
    lcd.cursor();
  } else {
    lcd.noCursor();
  }
}
void setup() {
  Serial.begin(115200);
  lcd.init();
  lcd.backlight();
  pinMode(lock,OUTPUT);
  digitalWrite(lock,0);
  //showSpalshScreen();
  lcd.clear();
  lcd.cursor();
  lcd.setCursor(0, 0);
  lcd.print("Enter Pass:");
  lcd.setCursor(12, 0);
}
void loop() {
  updateCursor();
  char key = keypad.getKey();
  if (key) {
    temp[num] = key;
    num++;
    //lcd.print(key);
    lcd.print('*');
    if(num > 3){
      num = 0;
      bool check = true;
      for(int i=0;i<4;i++){
        if(temp[i] != password[i]){
          check = false;
          //Serial.println(i);
        }
      }
      lcd.noCursor();
      lcd.setCursor(0, 1);
      if(check){
        lcd.print("Access Granted");
        digitalWrite(lock,1);
        delay(3000);
        digitalWrite(lock,0);
        lcd.clear();
        lcd.cursor();
        lcd.setCursor(0, 0);
        lcd.print("Enter Pass:");
        lcd.setCursor(12, 0);
      }
      else{
        lcd.print("Access Denied");
        delay(2000);
        lcd.clear();
        lcd.cursor();
        lcd.setCursor(0, 0);
        lcd.print("Enter Pass:");
        lcd.setCursor(12, 0);
      }
    }
  }
}