#include <LiquidCrystal.h>
#include <DS1307RTC.h>
// LCD Pins
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// Button Pins
const int buttonInc = 8; // Кнопка увеличения минут
const int buttonDec = 9; // Кнопка уменьшения минут
// Variables
int buttonIncState = 0;
int buttonDecState = 0;
int lastButtonIncState = 0;
int lastButtonDecState = 0;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2); // Инициализация LCD (16 символов, 2 строки)
pinMode(buttonInc, INPUT_PULLUP); // Внутренние подтягивающие резисторы
pinMode(buttonDec, INPUT_PULLUP); // Внутренние подтягивающие резисторы
// Настройка времени (только для первого запуска, после этого комментируйте)
// DS1307RTC.setDOW(SATURDAY); // День недели (SUNDAY=1, MONDAY=2, ...)
// DS1307RTC.setTime(10, 30, 00); // Часы, Минуты, Секунды
// DS1307RTC.setDate(19, 10, 2023); // День, Месяц, Год
lcd.print("Time Setting");
}
void loop() {
DateTime now = DS1307RTC.now();
// Чтение состояния кнопок
buttonIncState = digitalRead(buttonInc);
buttonDecState = digitalRead(buttonDec);
// Обработка нажатия кнопок
if (buttonIncState == LOW && lastButtonIncState == HIGH) {
now.incrementMinutes(1); // Увеличение минут
DS1307RTC.adjust(now);
}
if (buttonDecState == LOW && lastButtonDecState == HIGH) {
now.decrementMinutes(1); // Уменьшение минут
DS1307RTC.adjust(now);
}
// Отображение времени на LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(now.hour());
lcd.print(":");
lcd.print(now.minute());
lcd.print(":");
lcd.print(now.second());
// Сохранение состояния кнопок для следующей итерации
lastButtonIncState = buttonIncState;
lastButtonDecState = buttonDecState;
delay(100); // Задержка для плавного отображения
}