#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
const uint8_t ROWS = 4;
const uint8_t COLS = 4;
char keys[ROWS][COLS] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
uint8_t colPins[COLS] = { 5, 4, 3, 2 }; // Pins connected to C1, C2, C3, C4
uint8_t rowPins[ROWS] = { 9, 8, 7, 6 }; // Pins connected to R1, R2, R3, R4
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
String inputString;
String inputStored;
bool getCodeResults;
//sekcja diod LED i buzzera
#define LED_1 A0
#define LED_2 A1
#define LED_3 A2
#define LED_4 A3
#define buzzer 8 // buzzer zintegrowany z PCB i połaczony do pinu 8
void setup() {
Serial.begin(9600);
inputString.reserve(10); // maximum number of digit for a number is 10, change if needed
// Init
lcd.init();
lcd.backlight();
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
}
void loop() {
char key = keypad.getKey();
bool res = getGode();
if (key) {
if (key >= '0' && key <= '9') { // only act on numeric keys
inputString += key; // append new character to input string
} else if (key == '#') {
Serial.println("kod został odczytany"); // naciśnięcie # akceptuje wprowadzony kod
if (inputString.length() > 0) {
inputStored = inputString; // przypisanie kodu do zmiennej
inputString = ""; // wyzerowanie wprowdadzonego ciągu
if(inputStored == "123456"){
if(res){
lcd.setCursor(3, 0);
lcd.print("Kod jest OK");
Serial.println("Kod jest OK");
delay(1000);
lcd.clear();
Authorize(true);
}
}else{
Serial.println("Kod jest do Dupy :)");
Authorize(false);
}
}
} else if (key == '*') {
Serial.println("kod został wyczyszczony"); // naciśnięcie * kasuje wprowadzony kod
inputString = ""; // clear input
}
}
}
bool getGode()
{
getCodeResults = true;
return getCodeResults;
}
void Authorize(int unblock){
if(unblock>0){
Serial.println("Autoryzacja ");
Serial.println();
digitalWrite(LED_1, HIGH);
delay(500);
digitalWrite(LED_2, HIGH);
delay(500);
digitalWrite(LED_3, HIGH);
delay(500);
digitalWrite(LED_4, HIGH);
delay(500);
tone(buzzer, 4300);
delay(50);
tone(buzzer, 3300);
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
digitalWrite(LED_4, LOW);
noTone(buzzer);
delay(500);
lcd.clear();
lcd.print("Weryfikacja");
delay(1000);
lcd.clear();
}
else{
Serial.println("brak autoryzacji");
Serial.println();
digitalWrite(LED_1, HIGH);
digitalWrite(LED_2, HIGH);
digitalWrite(LED_3, HIGH);
digitalWrite(LED_4, HIGH);
tone(buzzer, 5300);
delay(1000);
tone(buzzer, 2300);
delay(90);
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
digitalWrite(LED_4, LOW);
noTone(buzzer);
delay(1000);
digitalWrite(LED_1, HIGH);
digitalWrite(LED_2, HIGH);
digitalWrite(LED_3, HIGH);
digitalWrite(LED_4, HIGH);
tone(buzzer, 5300);
delay(50);
tone(buzzer, 2300);
delay(90);
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
digitalWrite(LED_4, LOW);
noTone(buzzer);
delay(1000);
digitalWrite(LED_1, HIGH);
digitalWrite(LED_2, HIGH);
digitalWrite(LED_3, HIGH);
digitalWrite(LED_4, HIGH);
tone(buzzer, 5300);
delay(50);
tone(buzzer, 2300);
delay(900);
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
digitalWrite(LED_4, LOW);
noTone(buzzer);
delay(5000);
}
}