#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <Servo.h>
Servo Servak;
LiquidCrystal_I2C lcd(0x27, 16, 2);
const byte stroka = 4; // число строк клавиатуры
const byte stolbec = 4; // число столбцов клавиатуры
char MATRIX[stroka][stolbec] = {
{'1', '2', '3', 'A'}, //
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', ' '}
};
byte strPins[stroka] = {9, 8, 7, 6 }; //к каким выводам подключаем управление строками
byte stoPins[stolbec] = {5, 4, 3, 2}; //к каким выводам подключаем управление столбцами
Keypad KLAVA = Keypad(makeKeymap(MATRIX), strPins, stoPins, stroka, stolbec);
char x; //переменная, которая хранит данные нажатой клавиши
char x2; //переменная, которая хранит данные нажатой клавиши, но только при смене пароля
char y [5]; //переменная для массива символов кнопок, нажатых на матричной клавиатуре
char y2 [5]; //переменная для массива символов кнопок, нажатых на матричной клавиатуре, но то
int kolvo = 0;
int kolvo2=0;
int i;
byte Left1[] = {
B00000,
B00000,
B00000,
B00000,
B00011,
B00111,
B01100,
B01100
};
byte Left0[] = {
B01100,
B11111,
B11110,
B11100,
B11100,
B11110,
B11111,
B11111
};
byte Right0[] = {
B00110,
B11111,
B01111,
B00111,
B00111,
B01111,
B11111,
B11111
};
byte Right1Closed[] = {
B00000,
B00000,
B00000,
B00000,
B11000,
B11100,
B00110,
B00110
};
char password[4]={'7','6','8','0'};
int ERROR = 0;
void setup() {
Servak.attach(10);
Servak.write(90);
lcd.backlight();
lcd.init();
Serial.begin(9600);
lcd.setCursor(5,0);
lcd.print("Hello,");
lcd.setCursor(0,1);
lcd.print("Welcome to bank!");
delay(5000);
lcd.clear();
lcd.createChar(0, Left1);
lcd.createChar(1, Left0);
lcd.createChar(2, Right0);
lcd.createChar(3, Right1Closed);
}
void loop() {
lcd.setCursor(0,0);
lcd.print("Enter password");
x = KLAVA.getKey();
lcd.setCursor(14,1);
lcd.write(1);
lcd.setCursor(15,1);
lcd.write(2);
lcd.setCursor(14,0);
lcd.write(0);
lcd.setCursor(15,0);
lcd.write(3);
if(x){
if(x == ' '){
kolvo=kolvo-2;
lcd.setCursor(kolvo,1);
lcd.print(" ");
}
if(x == 'C'){
lcd.clear();
kolvo=0;}
lcd.setCursor(kolvo, 1);
lcd.print(x);
delay(1000);
lcd.setCursor(kolvo, 1);
lcd.print("*");
y[kolvo]=x;
kolvo=kolvo+1;
//kolvo - это количество нажатий на клавиатуру.
if(kolvo == 4){
if(y[0] == password[0] && y[1] == password[1] && y[2] == password[2] && y[3] == password[3]){
Abibys();
if (x == 'A'){
ServakClosed();
kolvo = 0;
}
}
else{
Abobys();
}
}
}
}
void Abibys() {
lcd.clear();
delay(100);
lcd.setCursor(14,1);
lcd.write(1);
lcd.setCursor(2,0);
lcd.print("OPEN:");
lcd.setCursor(15,1);
lcd.write(2);
lcd.setCursor(14,0);
lcd.write(0);
lcd.setCursor(15,0);
lcd.print(" ");
ServakOpen();
kolvo=0;
//ChangePassword();
}
void Abobys() {
ERROR=ERROR+1;
lcd.clear();
if(ERROR == 1){
lcd.setCursor(3,0);
lcd.print("ERROR 404!");
lcd.setCursor(3,1);
lcd.print("WRONG:1/3");
delay(2000);
lcd.clear();
}
if(ERROR == 2){
lcd.setCursor(3,0);
lcd.print("ERROR 404!");
lcd.setCursor(3,1);
lcd.print("WRONG:2/3");
delay(2000);
lcd.clear();
}
if(ERROR == 3){
lcd.setCursor(2,0);
lcd.print("BLOCKED FOR:");
lcd.setCursor(1,1);
lcd.print("RE.:CYBERATACK");
Timer1();
lcd.clear();
ERROR = 0;
}
lcd.setCursor(14,1);
lcd.write(1);
lcd.setCursor(15,1);
lcd.write(2);
lcd.setCursor(14,0);
lcd.write(0);
lcd.setCursor(15,0);
lcd.write(3);
kolvo = 0;
}
void Timer(){
for(int t=20; t>=0; t=t-1){
delay(1000);
if(t >= 10){
lcd.setCursor(7,0);
lcd.print(t);
}
if(t < 10){
lcd.setCursor(7,0);
lcd.print("0");
lcd.setCursor(8,0);
lcd.print(t);
}
}
}
void Timer1(){
for(int t=45; t>=0; t=t-1){
delay(1000);
if(t >= 10){
lcd.setCursor(13,0);
lcd.print(t);
}
if(t < 10){
lcd.setCursor(13,0);
lcd.print("0");
lcd.setCursor(14,0);
lcd.print(t);
}
}
}
void ServakOpen(){
for(i=90; i>=0; i=i-1){
Servak.write(i);
delay(20);
}
}
void ServakClosed(){
for(i=0; i<=90; i=i+1){
Servak.write(i);
delay(20);
}
}
void ChangePassword(){
lcd.clear();
delay(100);
lcd.setCursor(0,0);
lcd.print("Enter new Pas.");
lcd.setCursor(0,1);
lcd.print("4 Digit:");
x2 = KLAVA.getKey();
if(x2){
lcd.clear();
lcd.setCursor(kolvo2 ,1);
lcd.print(x2);
y2[kolvo2]=x2;
kolvo2=kolvo2+1;
}
if(kolvo2 == 4){
password[0] = y2[0];
password[1] = y2[1];
password[2] = y2[2];
password[3] = y2[3];
lcd.clear();
kolvo2 = 0;
}
}