// Upravuvanje na porta
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#define n 8 //dolzina na nizite t.e na psw sto go vnesuvame
char vnesena[n];
char tocna[n] = "123A456"; //lozinka
int lockOutput = 13; //za relay
byte brojac = 0; //oti e char moze vaka
char customKey; // za znacite koj ke gi vneseme od testatura
//----------------------------- za testaturata ---------------
const byte ROWS = 4;
const byte COLS = 4;
// Array to represent keys on keypad
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
//-------------------------------------------------------------------------------
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.backlight();
lcd.init();
pinMode(lockOutput, OUTPUT);
}
void loop() {
lcd.setCursor(0, 0);
lcd.print("Enter Password:");
customKey = customKeypad.getKey(); //zemame karakter od testatura
if (customKey) {
vnesena[brojac] = customKey;
lcd.setCursor(brojac, 1); //brojac= koloni
lcd.print(vnesena[brojac]);
brojac++;
}
// dali sme vnele koku sto treba znaci
if (brojac == n - 1) {
lcd.clear();
if (!strcmp(vnesena, tocna)) // ako se isti nizite
{
lcd.print("Tocna");
digitalWrite(lockOutput, HIGH);
delay(5000);
digitalWrite(lockOutput, LOW);
}
//ako ne se
else
{
lcd.print("Incorrect");
delay(5000);
}
//go cistime displayot
lcd.clear();
clearData(); //cistime tva sto ni e vo vnesesa
}
}
void clearData() { // za cistenje na nizata koja sme ja vnele
for(brojac=0;brojac<n-1;brojac++)
{
vnesena[brojac]=0;
}
brojac=0;
return;
}
/*do defult kako SDA i SCL sa kaj arduinoto A4,A5 ...
*/
/*releto funkcionira taka sto :
koga ke imame visok napon na IN :
- com i NO se kusa vrska
- koga ke imame nizok napon na in com i NC sa kusa vrska
*/