//kniznice
#include <Keypad.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
//displej
LiquidCrystal_I2C obrazovka(0x27, 16, 2);
//zapisanie klavesnice
const byte riadky = 4;
const byte stlpce = 4;
byte pinyriadky[riadky] = {11,10,9,8};
byte pinystlpce[stlpce] = {7,6,5,4};
char tlacidla[riadky][stlpce] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
Keypad moja_klavesnica = Keypad(makeKeymap(tlacidla), pinyriadky, pinystlpce, riadky, stlpce);
char klavesa;
//PIN
char array[4] = {};
char pin[4] = {'1','1','1','1'};
int i = 0;
//servo
Servo zamok;
void setup()
{
//serial na kontrolu z PC, zapnutie displeju, zapisanie tlacidla a LED pomocou registra a zapisanie serva aby sa zamkol
Serial.begin(9600);
obrazovka.begin(16, 2);
obrazovka.print("Zadaj PIN");
PORTD |= (1<<PD2);
DDRD |= (1<<PD3);
zamok.attach(12);
zamok.write(90);
}
void loop()
{
//tlacidlo zamkne trezor
if ( (PIND & (1<<PD2)) ==LOW)
{
reset();
}
//zadavanie na klavesnici
klavesa = moja_klavesnica.getKey();
if (klavesa) {
array[i] = klavesa;
i++;
}
if (i >= 4) {
for (int j = 0; j < 4; j++) {
if (array[j] != pin[j])
{
//displej povie ze nespravny pin, i sa resetuje, dalsi pokus
Serial.println("Chybny pin");
i = 0;
obrazovka.clear();
obrazovka.print("Chybny pin");
return;
}
if (j == 3){
//displej povie ze trezor je otvoreny, servo sa otoci a odomyka
Serial.println("Trezor je otvoreny");
obrazovka.clear();
obrazovka.print("Trezor otvoreny");
i = 0;
zamok.write(0);
//LED sa pomocou registra zapne
PORTD |= (1<<PD3);
return;
}
}
}
}
void reset()
{
Serial.println("Trezor zatvoreny");
i = 0;
zamok.write(90);
obrazovka.clear();
obrazovka.print("Zadaj PIN");
PORTD &= ~(1<<PD3);
}