#include <LiquidCrystal.h> // Подключаем библиотеку для работы с ЖК-дисплеем
#include <Keypad.h> // Подключаем библиотеку для работы с клавиатурой
#include <stdio.h> // Подключаем стандартную библиотеку ввода/вывода
#define GREEN_LED_PIN 10 // Определяем пин для зеленого светодиода
#define RED_LED_PIN 13 // Определяем пин для красного светодиода
const char validCode[] = "ABCD"; // Задаем действительный код
LiquidCrystal LCD(21, 20, 19, 18, 17, 16); // Инициализируем ЖК-дисплей
// Подключение клавиатуры 4x4
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
byte rowPins[ROWS] = { 2, 3, 4, 5 };
byte colPins[COLS] = { 6, 7, 8, 9 };
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); // Инициализируем клавиатуру
int lcd_putchar(char c, FILE *file) {
LCD.write(c); // Вывод символа на ЖК-дисплей
return 0;
}
char KeypadGetChar(FILE *file) {
char key;
do {
key = keypad.getKey(); // Получаем символ с клавиши клавиатуры
} while (key == NO_KEY); // Ожидаем, пока будет нажата клавиша
return key;
}
static FILE stream = { 0 };
void setup() {
LCD.begin(16, 2); // Инициализируем ЖК-дисплей с размерами 16x2
fdev_setup_stream(&stream, lcd_putchar, KeypadGetChar, _FDEV_SETUP_RW);
stdout = &stream; // Настроить стандартный вывод на ЖК-дисплей
stdin = &stream; // Настроить стандартный ввод через клавиатуру
printf("ENTER CODE:"); // Выводим текст на ЖК-дисплей
pinMode(GREEN_LED_PIN, OUTPUT); // Настраиваем пины для светодиодов
pinMode(RED_LED_PIN, OUTPUT);
}
void loop() {
char input[16]; // Массив для хранения введенного кода (цифры + завершающий нуль)
// Используйте scanf для считывания введенного кода
if (scanf("%4s", input) == 1) {
// Если введенный код совпадает с ожидаемым
if (strcmp(input, validCode) == 0) {
LCD.clear(); // Очистите экран
LCD.setCursor(0, 1);
printf("%s", input); // Вывод введенного кода на ЖК-дисплей
LCD.setCursor(0, 0);
printf("TRUE");
digitalWrite(GREEN_LED_PIN, HIGH); // Включить зеленый светодиод
} else {
// Введенный код не совпадает с ожидаемым
LCD.clear(); // Очистите экран
LCD.setCursor(0, 1);
printf("%s", input); // Вывод введенного кода на ЖК-дисплей
LCD.setCursor(0, 0);
printf("FALSE");
digitalWrite(RED_LED_PIN, HIGH); // Включить красный светодиод
}
}
delay(2000); // Подождать 2 секунды
LCD.clear(); // Очистить экран
printf("INPUT CODE:"); // Вывести текст "INPUT CODE:" на ЖК-дисплей
memset(input, 0, sizeof(input)); // Очистить массив введенного кода
digitalWrite(GREEN_LED_PIN, LOW); // Выключить оба светодиода
digitalWrite(RED_LED_PIN, LOW);
}