#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#define RELAY 10
#define OFFLED A0
#define ONLED A1
String pwd = "654321"; //muj tajny kod
String user_pwd = ""; //kod, který zadá uživatel
byte on_delay = 5; //doba sepnutí zámku v sekundach
LiquidCrystal_I2C lcd(0x27,16,2);
const byte numRows = 4; //radek
const byte numCols = 4; //sloupec
byte pinsRows[numRows] = {9,8,7,6};
byte pinsCols[numCols] = {5,4,3,2};
char keysMap[numRows][numCols] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'},
};
Keypad keypad = Keypad(
makeKeymap(keysMap),
pinsRows,pinsCols,
numRows,numCols);
bool stateLock = false; //stav zámku
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
pinMode(ONLED, OUTPUT);
pinMode(OFFLED, OUTPUT);
pinMode(RELAY, OUTPUT);
initLock();
}
void initLock(){
lcd.setCursor(3,0);
lcd.print("CODE LOCK");
digitalWrite(OFFLED, HIGH);
lcd.setCursor(0,1);
for(int i=0;i<16;i++){
lcd.print("*");
delay(50);
}
lcd.cursor();
clearLock();
}
void clearLock(){
lcd.clear();
lcd.home();
lcd.print("CODE:");
user_pwd = "";
}
void lockOn(){
digitalWrite(ONLED, HIGH);
digitalWrite(OFFLED, LOW);
digitalWrite(RELAY, HIGH);
lcd.clear();
lcd.setCursor(5,0);
lcd.print("UNLOCK");
lcd.setCursor(4,1);
lcd.print("TIME: ");
lcd.noCursor();
for(int i=on_delay;i>0;i--){
lcd.print(i);
delay(1000);
lcd.setCursor(10,1);
}
lockOff();
}
void lockOff(){
digitalWrite(ONLED, LOW);
digitalWrite(OFFLED, HIGH);
digitalWrite(RELAY, LOW);
lcd.clear();
lcd.setCursor(6,0);
lcd.print("LOCK");
lcd.noCursor();
delay(3000);
clearLock();
}
void start(){
}
void loop() {
char key = keypad.getKey();
if(key){
if(key>='0' && key<='9'){
//načítám číslice
lcd.print(key);
user_pwd += key;
}else if(key=='*'){
//vymazat doposud zadaný kód
clearLock();
}else if(key=='#'){
//potvrzení kodu
if(pwd.compareTo(user_pwd)==0){
lockOn();
}
}
Serial.println(key);
}
}