#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Подключение LCD дисплея по I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // Адрес экрана 0x27, размер 16x2
// Пины для кнопок увеличения числа и подтверждения
const int increaseButtonPin = 6;
const int submitButtonPin = 7;
// Максимальное значение, которое можно ввести (по вашему желанию)
const int maxNumber = 10;
// Переменные для хранения введенного пользователем числа и рандомного числа
int userNumber = 0;
int randomNumber = 0;
bool buttonState = LOW;
bool lastButtonState = LOW;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
bool gameEnded = false; // Флаг, указывающий на состояние завершения игры
void setup() {
// Инициализация LCD дисплея
lcd.init();
lcd.backlight();
lcd.clear();
// Настройка пинов для кнопок
pinMode(increaseButtonPin, INPUT);
pinMode(submitButtonPin, INPUT);
// Генерация случайного числа от 0 до maxNumber-1
randomSeed(analogRead(0));
randomNumber = random(maxNumber);
// Настройка последовательного порта для вывода в консоль
Serial.begin(9600);
Serial.println("Guess the number game!");
// Вывод правильного ответа в консоль перед началом игры
Serial.print("Correct answer: ");
Serial.println(randomNumber);
}
void loop() {
if (!gameEnded) {
// Отображение текущего введенного числа на LCD дисплее
lcd.setCursor(0, 0);
lcd.print("Your number:");
lcd.setCursor(0, 1);
lcd.print(userNumber);
// Чтение состояния кнопки увеличения числа с антидребезгом
int reading = digitalRead(increaseButtonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
// Обработка изменения состояния кнопки
if (buttonState == HIGH) {
// Увеличиваем число (ограничиваем до максимального значения)
userNumber = (userNumber + 1) % maxNumber;
}
}
}
lastButtonState = reading;
// Обработка кнопки подтверждения
if (digitalRead(submitButtonPin) == HIGH) {
// Проверяем число пользователя с фиксированным рандомным числом
if (userNumber == randomNumber) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Congratulations!");
lcd.setCursor(0, 1);
lcd.print("You won!");
Serial.println("You won!");
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sorry, try again!");
}
gameEnded = true; // Устанавливаем флаг завершения игры
delay(1000); // Задержка перед очисткой экрана
}
}
}