#include <Ds1302.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
Ds1302 rtc(5, 7, 6);
Ds1302::DateTime aktualnyCzas;
unsigned long ostatniaAktualizacja = 0;
void setup() {
lcd.init();
lcd.backlight();
rtc.init();
Ds1302::DateTime dt;
dt.year = 26;
dt.month = 8;
dt.day = 4;
dt.hour = 21;
dt.minute = 19;
dt.second = 40;
dt.dow = 1;
rtc.setDateTime(&dt);
rtc.getDateTime(&aktualnyCzas); // pierwszy odczyt
ostatniaAktualizacja = millis();
}
void loop() {
// Co sekundę zliczaną programowo, a nie z każdego odczytu chipa
if (millis() - ostatniaAktualizacja >= 1000) {
ostatniaAktualizacja += 1000;
aktualnyCzas.second++;
if (aktualnyCzas.second >= 60) {
aktualnyCzas.second = 0;
// co minutę resynchronizujemy z realnym RTC, żeby uniknąć driftu
rtc.getDateTime(&aktualnyCzas);
}
lcd.setCursor(0, 0);
lcd.print("Godz.: ");
if (aktualnyCzas.hour < 10) lcd.print("0");
lcd.print(aktualnyCzas.hour);
lcd.print(":");
if (aktualnyCzas.minute < 10) lcd.print("0");
lcd.print(aktualnyCzas.minute);
lcd.print(":");
if (aktualnyCzas.second < 10) lcd.print("0");
lcd.print(aktualnyCzas.second);
lcd.setCursor(0, 1);
lcd.print("Data: ");
if (aktualnyCzas.day < 10) lcd.print("0");
lcd.print(aktualnyCzas.day);
lcd.print("/");
if (aktualnyCzas.month < 10) lcd.print("0");
lcd.print(aktualnyCzas.month);
lcd.print("/20");
lcd.print(aktualnyCzas.year);
}
}