#include "button.h"
#include "ledControl.h"
#include "keypadControl.h"
#include "codeChecker.h"
#define BUTTON_PIN 14
#define LED_PIN 15
#define GREEN_LED 17
#define RED_LED 16
Button button(BUTTON_PIN);
LEDControl led(LED_PIN);
LEDControl greenLED(GREEN_LED);
LEDControl redLED(RED_LED);
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // Пины, подключенные к ЖК-дисплею
byte rowPins[ROWS] = {11, 10, 9, 8}; // Пины, подключенные к строкам клавиатуры
byte colPins[COLS] = {A3, A2, A1, A0}; // Пины, подключенные к столбцам клавиатуры
KeypadControl keypadControl(ROWS, COLS, rowPins, colPins);
CodeChecker codeChecker;
unsigned long currentMillis_1 = 0;
unsigned long currentMillis_2 = 0;
const long interval = 2000; // Интервал в миллисекундах
const long debounce = 200; // Время антидребезга
void setup() {
lcd.begin(16, 2); // Инициализация ЖК-дисплея
button.begin();
led.begin();
// Установка проверочного кода
char code[] = "1234"; // Предположим, что код - "1234"
codeChecker.setCode(code);
}
void loop() {
int buttonState = button.isPressed(currentMillis_1); // Считываем состояние кнопки
if (buttonState && millis() - currentMillis_1 >= debounce) {
// Если кнопка нажата, меняем состояние светодиода
led.toggle(); // Переключаем состояние светодиода
}
if (Serial.available()) {
String command = Serial.readStringUntil('\n');
command.trim();
if (command == "led on") {
led.turnOn();
} else if (command == "led off") {
led.turnOff();
}
}
if (millis() - currentMillis_2 >= interval) {
keypadControl.scan();
char* code = keypadControl.getCode();
// Проверка кода
if (codeChecker.checkCode(code)) {
greenLED.turnOn();
redLED.turnOff();
lcd.setCursor(0, 1);
lcd.print("Valid code");
} else {
greenLED.turnOff();
redLED.turnOn();
lcd.setCursor(0, 1);
lcd.print("Invalid code");
currentMillis_2 = millis();
}
}
}