#define PASS "314CA"
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
byte colPins[4] = {5, 4, 3, 2};
byte rowPins[4] = {9, 8, 7, 6};
char keys[4][4] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
bool oc = false, oc1 = true;
int dl = 1;
Keypad pad((char*)keys, rowPins, colPins, 4, 4);
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo servo;
String data = "";
void setup() {
lcd.init();
lcd.backlight();
Serial.begin(9600);
pinMode(11, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
servo.attach(10);
}
void loop() {
char key = pad.getKey();
if (key)switch (key) {
case '*':
if (data.equals(PASS)) {
oc = true;
OC();
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(5, 0);
lcd.print("CORRECT");
delay(500);
lcd.setCursor(0, 0);
lcd.print(" ");
delay(500);
lcd.setCursor(5, 0);
lcd.print("CORRECT");
delay(500);
}
else {
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(3, 0);
lcd.print("NO CORRECT");
delay(500);
lcd.setCursor(0, 0);
lcd.print(" ");
delay(500);
lcd.setCursor(3, 0);
lcd.print("NO CORRECT");
delay(500);
}
data = "";
break;
case '#':
data = data.substring(0, data.length() - 1);
break;
default :
if (data.length() < 8)data += key;
break;
}
if (!digitalRead(11))oc = true;
if (!digitalRead(12))oc = false;
OC();
DL();
}
void OC() {
if (oc != oc1) {
oc1 = oc;
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(5, 1);
lcd.print(oc ? "OPEN" : "CLOSE");
servo.write(oc ? 0 : 90);
}
}
void DL() {
if (dl != data.length()) {
dl = data.length();
lcd.home();
lcd.print("PASS: ");
lcd.setCursor(6, 0);
for (int i = 0; i < dl; i++)lcd.print('*');
}
}