Загрузка данных


#define SCL_PIN 5
#define SDO_PIN 6

#define PIN_CORRECT 2
#define PIN_WRONG A3   
#define PIN_ALARM 4

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x20, 16, 2);

byte Key;
char keyboardMap[17] = {
  '?', '1', '2', '3', 'A',
  '4', '5', '6', 'B',
  '7', '8', '9', 'C',
  '*', '0', '#', 'D'
};

const char correctCode[] = "1432";
String inputCode = "";
int attemptCount = 0;

byte Read_Keypad() {
  byte Count;
  byte Key_State=0;
  for (Count=1; Count<=16; Count++) {
    digitalWrite(SCL_PIN, LOW);
    if (!digitalRead(SDO_PIN)) {
      Key_State=Count;
    }
    digitalWrite(SCL_PIN, HIGH);
    delayMicroseconds(1000);
  }
  return Key_State;
}

void setup() {
  Serial.begin(9600);
  pinMode(SCL_PIN, OUTPUT);
  pinMode(SDO_PIN, INPUT);
  pinMode(PIN_CORRECT, OUTPUT);
  pinMode(PIN_WRONG, OUTPUT);
  pinMode(PIN_ALARM, OUTPUT);
  pinMode(A3, OUTPUT); 
  digitalWrite(A3, LOW);
  digitalWrite(PIN_CORRECT, LOW);
  digitalWrite(PIN_WRONG, LOW);
  digitalWrite(PIN_ALARM, LOW);
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("Enter code:");
  Serial.println("Введите код:");
}

void loop() {
  Key = Read_Keypad();

  if (Key) {
    inputCode += keyboardMap[Key];
    lcd.setCursor(0,1);
    lcd.print("Code: ");
    lcd.print(inputCode);
    if (inputCode.length() >= 4) {
      checkCode();
      inputCode = "";
      delay(2000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Enter code:");
    }
  }
  delay(100);
}

void checkCode() {
  if (inputCode.equals(correctCode)) {
    digitalWrite(PIN_CORRECT, HIGH);
    delay(2000);
    digitalWrite(PIN_CORRECT, LOW);
    attemptCount = 0;
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Access granted");
  } else {
    digitalWrite(PIN_WRONG, HIGH);
    delay(1000);
    digitalWrite(PIN_WRONG, LOW);
    attemptCount++;
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Wrong code");
    if (attemptCount >= 3) {
  
      for (int i=0; i<100; i++) {
        digitalWrite(A3, HIGH);
        delay(100);
        digitalWrite(A3, LOW);
        delay(100);
      }
      attemptCount=0;
    }
  }
}