// Библиотека для работы с текстовым дисплеем по шине I²C #include // Библиотека для работы с кнопкой #include // Создаём объект для работы с дисплеем // В параметрах передаём I²C-адрес дисплея, кол-во строк и символов LiquidCrystal_I2C lcd(0x38, 16, 2); // Создаём объекты кнопок для управления TroykaButton buttonMinute(2); TroykaButton buttonHour(3); int hours, minutes, seconds; long millisLastTime = 0; void setup() { // Инициализируем кнопки buttonMinute.begin(); buttonHour.begin(); // Инициализируем дисплей lcd.init(); // Включаем подсветку lcd.backlight(); // Устанавливаем курсор на первом знакоместе в первой строке lcd.setCursor(0, 0); // Выводим строку на дисплей lcd.print(""); setTime(12, 45, 30); } void loop() { // Обновляем время посекундно updateTime(); // Обновляем время через кнопки updateTimeButtons(); // Преобразуем время wrapTime(); // Выводим на дисплее время в формате «чч:мм:сс» printTimeLCD(); } // Функция для установки времени void setTime(int h, int m, int s) { hours = h; minutes = m; seconds = s; } // Функция для отсчёта времени посекундно void updateTime() { long millisNowTime = millis(); if (millisNowTime - millisLastTime > 1000) { millisLastTime = millisNowTime; seconds++; } } // Функция для обновления времени через кнопки void updateTimeButtons() { buttonHour.read(); buttonMinute.read(); if (buttonHour.isClick()) { hours++; } if (buttonMinute.isClick()) { minutes++; } } // Функция для форматирования времени // При достижении лимита в 60 секунд, 60 минут и 24 часа отсчёт начинается заново void wrapTime() { if (seconds >= 60) { minutes++; seconds -= 60; } if (minutes >= 60) { hours++; minutes -= 60; } if (hours >= 24) { hours = 0; } } // Функция для вывода на дисплее времени в формате «чч:мм:сс» void printTimeLCD() { lcd.setCursor(0, 1); lcd.print("TIME: "); printTwoDigits(hours); lcd.print(":"); printTwoDigits(minutes); lcd.print(":"); printTwoDigits(seconds); } // Функция для вывода на дисплей двух цифр: // на первом знакоместе 0, если цифра меньше 10 void printTwoDigits(int digit) { if (digit < 10) { lcd.print("0"); } lcd.print(digit); }