#include <LiquidCrystal_I2C.h> // Підключення бібліотеки для роботи з LCD-дисплеєм через I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // Створення об'єкта lcd з I2C адресою дисплея 0x27, 16 стовпців, 2 рядки
const int buttonPin0=6; // Пін для першої кнопки
const int buttonPin1=7; // Пін для другої кнопки
int buttonState0; // Змінна для зберігання стану першої кнопки
int buttonState1; // Змінна для зберігання стану другої кнопки
const int ledPinR=9; // Пін для червоного світлодіода
const int ledPinG=10; // Пін для зеленого світлодіода
String EnteredValue; // Змінна для зберігання введеного значення
String ValueRandomN; // Змінна для зберігання згенерованого випадкового значення
// Функція setup(), що виконується один раз при завантаженні плати
void setup() {
pinMode(buttonPin0, INPUT_PULLUP); // Налаштування піна першої кнопки як вхідного з підтягувальним резистором
pinMode(buttonPin1, INPUT_PULLUP); // Налаштування піна другої кнопки як вхідного з підтягувальним резистором
pinMode(ledPinR, OUTPUT); // Налаштування піна для червоного світлодіода як вихідного
pinMode(ledPinG, OUTPUT); // Налаштування піна для зеленого світлодіода як вихідного
lcd.init(); // Ініціалізація LCD-дисплея
lcd.backlight(); // Увімкнення підсвітки дисплея
Serial.begin(9600); // Ініціалізація серійного зв'язку зі швидкістю 9600 бод
}
// Функція loop(), що виконується нескінчену кількість разів, доки є живлення
void loop() {
buttonState0=digitalRead(buttonPin0); // Зчитування стану першої кнопки
buttonState1=digitalRead(buttonPin1); // Зчитування стану другої кнопки
// Перевірка, чи довжина введеного значення дорівнює довжині згенерованого випадкового значення
if(EnteredValue.length()==ValueRandomN.length()){
// Перевірка, чи введене значення дорівнює згенерованому випадковому значенню
if(EnteredValue==ValueRandomN){
digitalWrite(ledPinG, HIGH); // Увімкнення зеленого світлодіода
delay(1000); // Затримка на 1 секунду
digitalWrite(ledPinG, LOW); // Вимкнення зеленого світлодіода
}
else{
digitalWrite(ledPinR, HIGH); // Увімкнення червоного світлодіода
delay(1000); // Затримка на 1 секунду
digitalWrite(ledPinR, LOW); // Вимкнення червоного світлодіода
}
int randomN=random(0, 256); // Генерація випадкового числа від 0 до 255
ValueRandomN=String(randomN, BIN); // Перетворення випадкового числа в двійковий рядок
Serial.println(ValueRandomN); // Виведення двійкового рядка в серійний монітор
lcd.clear(); // Очищення дисплея
lcd.setCursor(0, 0); // Встановлення курсора на початок першого рядка
lcd.print("Generated: "); // Виведення тексту "Generated: " на дисплей
lcd.setCursor(12, 0); // Встановлення курсора в 12-ту позицію першого рядка
lcd.print(randomN); // Виведення випадкового числа на дисплей
lcd.setCursor(0, 1); // Встановлення курсора на початок другого рядка
lcd.print("Enter: "); // Виведення тексту "Enter: " на дисплей
EnteredValue=""; // Очищення рядка для введеного значення
}
// Перевірка, чи натиснута перша кнопка
if(buttonState0==LOW){
EnteredValue+='0'; // Додавання '0' до введеного значення
lcd.setCursor(7, 1); // Встановлення курсора в 7-му позицію другого рядка
lcd.print(EnteredValue); // Виведення введеного значення на дисплей
}
// Перевірка, чи натиснута друга кнопка
if(buttonState1==LOW){
EnteredValue+='1'; // Додавання '1' до введеного значення
lcd.setCursor(7, 1); // Встановлення курсора в 7-му позицію другого рядка
lcd.print(EnteredValue); // Виведення введеного значення на дисплей
}
delay(100); // Затримка для коректного зчитування натиснення кнопки
}