#include <LiquidCrystal_I2C.h>
// Инициализация дисплея
LiquidCrystal_I2C lcd(0x27, 16, 2);
int time = 20; // Переменная для хранения времени
uint32_t myTimer1, myTimer2, myTimer3; // Переменные для таймеров
bool button = HIGH, newFlag = false, oldFlag = false, buttonReset; // Переменные для кнопок и флагов
void setup() {
lcd.init(); // Инициализация LCD
lcd.backlight(); // Включение подсветки LCD
pinMode(2, INPUT_PULLUP); // Установка пина 2 в режим входа с подтягивающим резистором
pinMode(3, INPUT_PULLUP); // Установка пина 3 в режим входа с подтягивающим резистором
Serial.begin(9600); // Инициализация последовательной связи
}
void loop() {
Serial.println("newFlag " + String(newFlag) + " oldFlag " + String(oldFlag)); // Вывод состояния флагов в монитор последовательного порта
lcd.setCursor(0, 0); // Установка курсора LCD в начало первой строки
lcd.print("t= " + String(time) + " c "); // Вывод времени на LCD
// Проверка состояния зеленой кнопки каждые 100 миллисекунд
if (millis() - myTimer2 >= 100) {
myTimer2 = millis();
button = digitalRead(2);
if (button == LOW) {
oldFlag = newFlag; // Сохранение предыдущего состояния флага
newFlag = true; // Установка нового состояния флага
myTimer1 = millis(); // Сброс таймера
}
}
// Проверка состояния красной кнопки сброса каждые 100 миллисекунд
if (millis() - myTimer3 >= 100) {
myTimer3 = millis();
buttonReset = digitalRead(3);
// Если нажата кнопка сброса и время прошлое уже обнулено
if (buttonReset == LOW && newFlag == false) {
lcd.clear(); // Очистка дисплея
time = 20; // Обнуление времени
newFlag = false; // Сброс флага
oldFlag = false; // Сброс флага
}
}
// Увеличение времени, если флаги установлены
if (newFlag == true && oldFlag == false) {
if (millis() - myTimer1 >= 250) {
myTimer1 = millis();
time--;
if(time < 0)
{
time = 0;
newFlag = false;
}
}
}
// Сброс флагов, если оба установлены
if (newFlag == 1 && oldFlag == 1) {
newFlag = false;
oldFlag = false;
}
}