byte hour; byte minute; byte second; byte day; byte month; int year;
Variabilele folosite pentru date
DS3231 rtc; LiquidCrystal_I2C lcd(0x27, 16, 2);
Initializarea rtc si lcd
void setup() {
Serial.begin(9600);
// Inițializează comunicarea I2C
Wire.begin();
// Inițializează LCD
lcd.begin(16, 2);
lcd.init();
lcd.backlight();
lcd.clear();
rtc.begin();
}
Functia de setup unde initializez comunicarea I2C si dau begin la lcd si rtc
void loop() {
// Obține data și ora curentă de la RTC
DateTime now = rtc.now();
second = now.second();
minute = now.minute();
hour = now.hour();
day = now.day();
month = now.month();
year = now.year();
Salvez anul, luna, ziua, ora, minutul si secunda in variabile cu ajutorul modulului RTC
second += 48; // Corecție pentru secundă
if (second >= 60) {
second -= 60;
minute += 1;
}
minute += 33; // Corecție pentru minut
if (minute >= 60) {
minute -= 60;
hour += 1;
}
hour += 12; // Corecție pentru oră
if (hour >= 24) {
hour -= 24;
}
int daysInMonth;
if (month == 2) {
// Verifică dacă anul este bisect
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
daysInMonth = 29;
} else {
daysInMonth = 28;
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
daysInMonth = 30;
} else {
daysInMonth = 31;
}
if (day > daysInMonth) {
day = 1;
month += 1;
}
if (month > 12) {
month = 1;
year += 1;
}
Incerc sa corectez datele, apoi fac algoritmul pentru data si timp
// Afișează data și ora pe LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Data: ");
lcd.print(day, DEC);
lcd.print('/');
lcd.print(month, DEC);
lcd.print('/');
lcd.print(year, DEC);
lcd.setCursor(0, 1);
lcd.print("Ora: ");
lcd.print(hour, DEC);
lcd.print(':');
if (minute< 10) {
lcd.print('0'); // Adaugă un 0 înaintea minutului dacă e mai mic de 10
}
lcd.print(minute, DEC);
lcd.print(':');
if (second< 10) {
lcd.print('0'); // Adaugă un 0 înaintea secundei dacă e mai mică de 10
}
lcd.print(second, DEC);
//Așteaptă un pic înainte de a actualiza din nou delay(1000); }
Afisez pe ecranul lcd data si ora
Cod sursă, biblioteci folosite si README (.zip):