


Der Arduino kann nur ab dem Zeitpunkt des Einschaltens die Zeit messen. Das aktuelle Datum und die Zeit kann nur mit einem RTC-Modul gesetzt und gelesen werden.
Hier soll das Modul DS3231 zum Einsatz kommen.
Auf dem LCD soll der Wochentag, das Datum und die aktuelle Uhrzeit angezeigt werden.
So sieht es auf dem LCD aus:
Anzeige im Seriellen Monitor:

➨ Zeit im Seriellen Monitor anzeigen
Schließe das LCD an:


➨LCD

Normalerweise wäre eine komplexe Verkabelung zum Betrieb eines LCDs nötig. Der ➨I2C-Bus regelt über einen eigenen Mikroprozessor die Kommunikation der Datenleitungen untereinander. Es werden deshalb nur vier Anschlüsse benötigt.

Die Helligkeit kann mit einem Potentiometer auf der Rückseite des LCDs eingestellt werden.
Benötigte Bauteile:
- LCD I2C 1602
- RTC-Modul DS3231
- Leitungsdrähte
Baue die Schaltung auf.
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Benötigte Bibliotheken:
Arduino IDE 1.8x:
Sketch → Bibliothek einbinden → Bibliotheken verwalten


Arduino IDE 2.x:
Definiere die Variablen und binde die benötigten Bibliotheken ein:
# include <RTClib.h>
# include <LiquidCrystal_I2C.h>
// Name des RTC-Moduls
RTC_DS3231 rtc;
// Name des LCD-Moduls
LiquidCrystal_I2C lcd(0x27, 20, 4);
Der setup-Teil:
void setup()
{
// RTC-Modul starten
rtc.begin();
/*
wenn Datum und Zeit nicht korrekt -> Datum/Zeit setzen
Jahr, Monat, Tag, Stunde, Minute, Sekunde
rtc.adjust(DateTime(2020, 12, 13, 13, 31, 30));
*/
// LCD starten
lcd.init();
lcd.backlight();
}
Verwende diese Schlüsselwörter für die Ausgabe auf dem LCD.
rtc -> Name des Moduls
aktuell -> aktuelle Zeit (DateTime aktuell = rtc.now();)
Schlüsselwort | Anzeige |
---|---|
adjust(DateTime(Jahr Monat, Tag, Stunde, Minute, Sekunde); | Beispiel: rtc.adjust(DateTime(2020, 12, 13, 13, 31, 30)); |
aktuell.dayOfTheWeek() | Nummer des Wochentages 0 = Sonntag 1 = Montag . . . 6 = Samstag |
aktuell.day() | Tag |
aktuell.month() | Monat 1 = Januar 2 = Februar ... 12 = Dezember |
aktuell.year() | Jahr |
aktuell.hour() | Stunde |
aktuell.minute()) | Minute |
aktuell.second()) | Sekunde |
Uhrzeit als Array definieren: char Zeit[] = "Uhrzeit: hh:mm:ss"; print(aktuell.toString(Zeit)); | hh = Stunden mm = Minuten ss = Sekunden |
Datum als Array definieren: char Datum[] = "DD.MM.YYYY"; print(aktuell.toString(Datum)); | DD = Tag MM = Monat YYYY = 4-stelliges Jahr |
now() | aktuelle Zeit holen |
Der loop-Teil. Beachte die Kommentare.
void loop()
{
// aktuelle Zeit holen
DateTime aktuell = rtc.now();
lcd.setCursor(0, 0);
/*
Wochentag anzeigen
0 = Sonntag
1 = Montag
...
6 = Samstag
*/
switch (aktuell.dayOfTheWeek())
{
case 0:
lcd.print("Sonntag");
break;
case 1:
lcd.print("Montag");
break;
case 2:
lcd.print("Dienstag");
break;
case 3:
lcd.print("Mittwoch");
break;
case 4:
lcd.print("Donnerstag");
break;
case 5:
lcd.print("Freitag");
break;
case 6:
lcd.print("Samstag");
break;
}
// Datum anzeigen
lcd.setCursor(0, 1);
char Datum[] = "Datum: DD.MM.YYYY";
lcd.print(aktuell.toString(Datum));
// Zeit anzeigen
lcd.setCursor(0, 2);
char Zeit[] = "Uhrzeit hh:mm:ss";
lcd.print(aktuell.toString(Zeit));
delay(1000);
}
Du kannst auch die Monatsnamen anzeigen lassen:
void loop()
{
// aktuelle Zeit holen
DateTime aktuell = rtc.now();
lcd.setCursor(0, 0);
/*
Wochentag anzeigen
0 = Sonntag
1 = Montag
...
6 = Samstag
*/
switch (aktuell.dayOfTheWeek())
{
case 0:
lcd.print("Sonntag");
break;
case 1:
lcd.print("Montag");
break;
case 2:
lcd.print("Dienstag");
break;
case 3:
lcd.print("Mittwoch");
break;
case 4:
lcd.print("Donnerstag");
break;
case 5:
lcd.print("Freitag");
break;
case 6:
lcd.print("Samstag");
break;
}
// Leerzeichen hinzufügen
lcd.print(" ");
// Datum anzeigen -> Tag
lcd.setCursor(0, 1);
lcd.print(String(aktuell.day()) + ".");
/*
Monatsnamen anzeigen
1 = Januar
2 = Februar
...
12 = Dezember
*/
lcd.print(" ");
switch (aktuell.month())
{
case 1:
lcd.print("Januar");
break;
case 2:
lcd.print("Februar");
break;
case 3:
lcd.print("M\341rz");
break;
case 4:
lcd.print("April");
break;
case 5:
lcd.print("Mai");
break;
case 6:
lcd.print("Juni");
break;
case 7:
lcd.print("Juli");
break;
case 8:
lcd.print("August");
break;
case 9:
lcd.print("September");
break;
case 10:
lcd.print("Oktober");
break;
case 11:
lcd.print("November");
break;
case 12:
lcd.print("Dezember");
break;
}
lcd.print(" ");
// Jahr anzeigen
lcd.print(String(aktuell.year()));
// Zeit anzeigen
lcd.setCursor(0, 2);
char Zeit[] = "Uhrzeit: hh:mm:ss";
lcd.print(aktuell.toString(Zeit));
delay(1000);
}
Eine weitere Alternative: Zeit mit den Methoden hour(), minute() und second() anzeigen:
void loop()
{
// aktuelle Zeit lesen
DateTime aktuell = rtc.now();
// Wochentag, Datum und Zeit anzeigen
lcd.setCursor(0, 0);
/*
Wochentag anzeigen
0 = Sonntag
1 = Montag
...
6 = Samstag
*/
switch (aktuell.dayOfTheWeek())
{
case 0:
lcd.print("Sonntag");
break;
case 1:
lcd.print("Montag");
break;
case 2:
lcd.print("Dienstag");
break;
case 3:
lcd.print("Mittwoch");
break;
case 4:
lcd.print("Donnerstag");
break;
case 5:
lcd.print("Freitag");
break;
case 6:
lcd.print("Samstag");
break;
}
lcd.setCursor(0, 1);
lcd.print(aktuell.day());
lcd.print(".");
// Monatsnamen anzeigen
lcd.print(" ");
switch (aktuell.month())
{
case 1:
lcd.print("Januar");
break;
case 2:
lcd.print("Februar");
break;
case 3:
lcd.print("M\341rz");
break;
case 4:
lcd.print("April");
break;
case 5:
lcd.print("Mai");
break;
case 6:
lcd.print("Juni");
break;
case 7:
lcd.print("Juli");
break;
case 8:
lcd.print("August");
break;
case 9:
lcd.print("September");
break;
case 10:
lcd.print("Oktober");
break;
case 11:
lcd.print("November");
break;
case 12:
lcd.print("Dezember");
break;
}
lcd.print(" ");
lcd.print(aktuell.year());
lcd.setCursor(0, 2);
// wenn Stunden < 10 -> führende 0 setzen
if (aktuell.hour() < 10) lcd.print("0");
lcd.print(aktuell.hour());
lcd.print(':');
// 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());
}
Verwandte Aufgaben:
- Countdown mit einer einstelligen 7-Segment-Anzeige
- Countdown mit einem OLED-Display
- Farbenspiele mit einer RGB-Matrix
- Labyrinth-Spiel mit TFT und Fernbedienung
- Labyrinthspiel mit Joystick und TFT
- Länder-Info
- LED-Matrix - Countdown
- LED-Matrix - Joystick-Spiel
- LED-Matrix - Lauflicht
- LED-Matrix - Würfeln
- Lottozahlen - Anzeige auf einem LCD
- Lottozahlen - Anzeige auf einem OLED-Display
- Multiplikations-Taschenrechner
- Spiel mit einer RGB-Matrix
- Taschenrechner Grundrechenarten
- Würfeln einstellige 7-Segment-Anzeige und Fernbedienung
- Würfeln - Anzeige auf einem OLED-Display
- Würfelspiel mit einer vierstelligen Anzeige
- Würfeln mit einer einstelligen Anzeige
Letzte Aktualisierung: