#include <Keypad.h>
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//khai bao LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
//Khai báo bàn phím
const byte rows = 4;
const byte cols = 4;
char keys[rows][cols]={
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[rows] = {2, 3, 4, 5};
byte colPins[cols] = {6, 7, 8, 9};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cols);
//khai bao khoa
Servo servo;
int pos = 0;
//pass
String pw = "1234";
String inpw;
void setup() {
lcd.begin(16, 2);
lcd.print("Enter passwpord:");
servo.attach(10);
servo.write(0); //khoa dong
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
char key = keypad.getKey();
if (key == '*'){
setPw();
pw = inputPw();
} else if (key =='#') {
inpw = inputPw();
if (inpw.equals(pw)) {
lcd.clear();
lcd.print("Open!");
digitalWrite(13, HIGH);//led xanh bat
delay(1000);
digitalWrite(13, LOW);
openLock();
} else {
lockMessage();
}
}
}
void openLock(){
for (pos = 0; pos <= 90; pos +=1) {
servo.write(pos);
delay(15);
}
delay(5000);// open 5s
for (pos = 90; pos >= 0; pos -= 1) {
servo.write(pos);
delay(15);
}
}
String inputPw() {
lcd.setCursor(5, 1);
lcd.print("[____]");
lcd.setCursor(6, 1);
String result = "";
while (result.length() < 4) {
char key = keypad.getKey();
if (key >= '0' && key <= '9') {
lcd.print('*');
result += key;
}
}
return result;
}
bool setPw() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Enter New password:");
String newpw = inputPw();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Confirm password:");
String confirmpw = inputPw();
if (newpw.equals(confirmpw)) {
lcd.print("Password updated!")
return true;
} else {
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("code mismatch");
delay(200);
return false;
}
}
void lockMessage() {
lcd.clear();
lcd.print("Wrong!");
digitalWrite(12, HIGH);//buzzer bật
digitalWrite(11, HIGH);//led do bat
delay(1000);
tone(12, 100, 1000);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
inpw = "";//xoa pw khi nhap sai
}