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):