//A - очистка ввода кода
// B - удаление последней цифры
// C - подтверждение ввода
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>; // Подключаем библиотеку для работы с LCD дисплеем по шине I2C
#include <Servo.h>;
const byte ROWS = 4;
const byte COLS = 4;
byte time=0, inv=1 ,time1=0 , CodeOk=0 , newCode=0;
String myCode="";
String myEnterCode="";
char keys[ROWS][COLS] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
uint8_t rowPins[ROWS] = { 9, 8, 7, 6 }; // Pins connected to R1, R2, R3, R4
uint8_t colPins[COLS] = { 5, 4, 3, 2 }; // Pins connected to C1, C2, C3, C4
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Объявляем объект библиотеки, указывая параметры дисплея (адрес I2C = 0x27, количество столбцов = 16, количество строк = 2)
Servo servo;
void setup() {
Serial.begin(9600);
lcd.backlight();
lcd.init();
lcd.setCursor(0, 0); //Устанавливаем курсор на дисплее в позицию (0 столбец, 0 строка)
lcd.print("Enter new code");
lcd.setCursor(0, 1); //Устанавливаем курсор на дисплее в позицию (0 столбец, 1 строка)
servo.attach(10);
servo.write(0);
}
void loop() {
//if (inv==1){
// lcd.setCursor(myCode.length(), 1);
// lcd.print("_");
// inv=inv*(-1);
//} else {
// lcd.setCursor(myCode.length(), 1);
// lcd.print(" ");
// inv=inv*(-1);
// }
char key = keypad.getKey();
delay(100);
if(newCode==0)
{
if ((key != NO_KEY)&&((myEnterCode.length())<6)&&(key>='0')&&(key<='9'))
{
myEnterCode=myEnterCode+key;
lcd.setCursor(0, 1);
lcd.print(myEnterCode);
}
if (key=='A')
{
lcd.setCursor(0, 1);
lcd.print(" ");
myEnterCode="";
}
if ((key=='B')&&(myEnterCode.length()>0))
{
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(myEnterCode.length()-1, 1);
myEnterCode=myEnterCode.substring(0,(myEnterCode.length()-1));
lcd.setCursor (0, 1);
lcd.print(myEnterCode);
}
if (key=='C')
{
newCode=1;
lcd.setCursor (0, 0);
lcd.print("Enter Code ");
lcd.setCursor (0, 1);
lcd.print(" ");
}
}
else
{
if (time==0)
{
lcd.backlight();
}
if ((key != NO_KEY)&&((myCode.length())<6)&&(key>='0')&&(key<='9'))
{
Serial.println(key);
myCode=myCode+key;
lcd.setCursor(0, 1);
lcd.print(myCode);
Serial.print("myCode=");
Serial.println(myCode);
}
if (key=='A'){
lcd.setCursor(0, 1);
lcd.print(" ");
myCode="";
Serial.print("myCode=");
Serial.println(myCode);
}
if ((key=='B')&&(myCode.length()>0)){
lcd.setCursor(myCode.length()-1, 1);
lcd.print(" ");
myCode=myCode.substring(0,(myCode.length()-1));
lcd.setCursor(0, 1);
Serial.print("myCode=");
Serial.println(myCode);
}
if (key=='C')
{
if (myCode==myEnterCode){
servo.write(180);
lcd.setCursor(1, 1);
lcd.print("CODE OK");
myCode="";
time=0;
time1++;
CodeOk=1;
} else {
lcd.setCursor(0, 1);
lcd.print(" ");
myCode="";
myCode="";
time=0;
}
Serial.print("myCode=");
Serial.println(myCode);
}
if (myCode.length()>0){
time++;
Serial.print("Time=");
Serial.println(time);
}
if (CodeOk==1)
{
time1++;
Serial.print("Time1=");
Serial.println(time1);
}
if (time1>50)
{
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.noBacklight();
time1=0;
CodeOk=0;
}
if (time>250)
{
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.noBacklight();
}
}
}