Zeit anzei­gen mit einem RTC-Modul

Lese­zeit: 4 Minu­ten
Navi­ga­ti­on

Der Ardui­no kann nur ab dem Zeit­punkt des Ein­schal­tens die Zeit mes­sen. Das aktu­el­le Datum und die Zeit kann nur mit einem RTC-Modul gesetzt und gele­sen wer­den.
Hier soll das Modul DS3231 zum Ein­satz kom­men. Du musst über die Biblio­theks­ver­wal­tung die Biblio­thek RTC­lib instal­lie­ren.

Auf dem LCD soll der Wochen­tag, das Datum und die aktu­el­le Uhr­zeit ange­zeigt wer­den.

Benö­tig­te Bau­tei­le:

  • LCD I2C 1602
  • RTC-Modul DS3231
  • Lei­tungs­dräh­te

Baue die Schal­tung auf.
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Benö­tig­te Biblio­the­ken:

Sketch → Biblio­thek ein­bin­den → Biblio­the­ken ver­wal­ten

Defi­nie­re die Varia­blen und bin­de die benö­tig­ten Biblio­the­ken ein:

# include <RTClib.h> 
# include <LiquidCrystal_I2C.h>

// Name des RTC-Moduls 
RTC_DS3231 rtc; 

// Wochentage char daysOfTheWeek[7][12] = {"Sonntag", "Montag", "Dienstag", "Mittwoch",  "Donnerstag", "Freitag", "Samstag"}; 

// Name des LCD-Moduls
LiquidCrystal_I2C lcd(0x27, 20, 4); 

Der setup-Teil:

void setup()  
{   
  /*
    wenn Datum und Zeit nicht korrekt → Datum/Zeit setzen     
    Jahr, Monat, Tag, Stunde, Minute, Sekunde     
    rtc.adjust(DateTime(2018, 10, 25, 17, 28, 30));
  */

  // RTC-Modul starten   
  rtc.begin();   

  // LCD starten
  lcd.init();
  lcd.backlight(); 
} 

Ver­wen­de die­se Schlüs­sel­wör­ter für die Aus­ga­be auf dem LCD.

Schlüs­sel­wortAnzei­ge
aktuell.daysOfTheWeek[aktuell.dayOfTheWeek()]Name des Wochen­ta­ges
aktu​ell​.day()Tag
aktuell.month()Monat
aktuell.year() Jahr
aktuell.hour()Stun­de
aktuell.minute())Minu­te
aktuell.second())Sekun­de

So soll es aus­se­hen:

Der loop-Teil:

void loop() 
{
  // aktuelle Zeit holen
  DateTime aktuell = rtc.now();

  lcd.setCursor(0, 0);
  // Wochentag
  lcd.print(daysOfTheWeek[aktuell.dayOfTheWeek()]);
  lcd.setCursor(0, 1);

  // Tag
  lcd.print(aktuell.day());
  lcd.print(".");
  
  // Monat
  lcd.print(aktuell.month());
  lcd.print('.');
 
  // Jahr
  lcd.print(aktuell.year());
  lcd.setCursor(0, 2);

  // Stunde
  lcd.print(aktuell.hour());
  lcd.print(':');

  // Minute
  lcd.print(aktuell.minute());
  lcd.print(':');

  // Sekunde
  lcd.print(aktuell.second());
  delay(1000);
}

Lei­der gibt es noch einen klei­nen Schön­heits­feh­ler:

Liegt die Anzahl der Minu­ten oder Sekun­den unter 10, wird die übli­che füh­ren­de 0 nicht ange­zeigt.

Eine if-Abfrage vor der Aus­ga­be der Minuten/Sekunden löst das Pro­blem:

  // wenn Minuten < 10 → führende 0 setzen
  if (aktuell.minute() < 10) lcd.print("0");    
  lcd.print(aktuell.minute()); 
  lcd.print(':');

  // wenn Sekunden < 10 → führende 0 setzen
  if (aktuell.second() < 10) lcd.print("0");    
  lcd.print(aktuell.second()); 


Ver­wand­te Auf­ga­ben:


Letzte Aktualisierung: 27. Jul 2020 @ 21:26