Der Arduino kann nur ab dem Zeitpunkt des Einschaltens die Zeit messen. Das aktuelle Datum und die Zeit kann nur mit einem RTC-Modul (RealTimeClock) gesetzt und gelesen werden. Beim ersten Start muss das aktuelle Datum und die aktuelle Zeit manuell gesetzt werden, anschließend lauft die Zeit mit Hilfe der Batterie weiter. Außerdem misst das hier verwendete Modul DS3231 zusätzlich die Temperatur.
Der Schaltplan:
Benötigte Bibliothek:
Sketch ⇒ Bibliothek einbinden ⇒ Bibliotheken verwalten
Die Funktionen der Bibliothek RTCLib:
rtc -> Name des Moduls
aktuell -> Name der über rtc.now() ermittelten Zeit
Funktionen der Bibliothek Adafruit RTClib
Schlüsselwort | Anzeige/Parameter |
---|---|
adjust(DateTime(Jahr Monat, Tag, Stunde, Minute, Sekunde) | Beispiel: rtc.adjust(DateTime(2022, 12, 13, 13, 31, 30)); |
now() | aktuelle Zeit holen |
dayOfTheWeek() | Nummer des Wochentages 0 = Sonntag 1 = Montag . . . 6 = Samstag |
day() | Tag |
month() | Monat 1 = Januar 2 = Februar ... 12 = Dezember |
year() | Jahr |
hour() | Stunde |
minute()) | Minute |
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 |
getTemperature() | Temperatur ermitteln |
Beispiel: Datum, Zeit und Temperatur im Seriellen Monitor anzeigen
Das dazugehörige Programm:
// benötigte Bibliothek einbinden
#include "RTClib.h"
// Name des RTC-Moduls (rtc)
RTC_DS3231 rtc;
void setup()
{
// RTC-Modul starten
rtc.begin();
Serial.begin(9600);
/*
wenn Datum und Zeit nicht korrekt -> Datum/Zeit setzen
Jahr, Monat, Tag, Stunde, Minute, Sekunde
Beispiel: 2024 Mai 5. 10 Uhr 30 Minuten 30 Sekunden
rtc.adjust(DateTime(2024, 5, 5, 10, 30, 30));
*/
}
void loop()
{
// rtc.now() -> aktuelle Zeit holen
DateTime aktuell = rtc.now();
/*
Datumsformat festlegen
DD -> Tag mit führender 0
MM -> Monat mit führender 0
YYYY -> vollständige Angabe des Jahres
*/
char Datum[] = "DD.MM.YYYY ";
// Datum in Zeichenkette (String) umwandeln und anzeigen
Serial.print(aktuell.toString(Datum));
// Format der Zeitangabe festlegen
char Zeit[] = "hh:mm:ss";
// Zeitangabe in Zeichenkette (String) umwandeln und anzeigen
Serial.print("Uhrzeit: ");
Serial.print(aktuell.toString(Zeit));
// Temperatur ermitteln
String Temperatur = String(rtc.getTemperature());
// Wert wid im angelsächsisches Zahlenformat ermittelt
// . durch , ersetzen
Temperatur.replace(".", ",");
Serial.println(" Temperatur: " + Temperatur + "°C");
// 1 Sekunde Pause
delay(1000);
}
Erweiterte Version mit Anzeige der Namen der Wochentage und der Monatsnamen:
Das dazugehörige Programm:
#include "RTClib.h"
// Name des RTC-Moduls
RTC_DS3231 rtc;
void setup()
{
// RTC-Modul starten
rtc.begin();
Serial.begin(9600);
/*
wenn Datum und Zeit nicht korrekt -> Datum/Zeit setzen
Jahr, Monat, Tag, Stunde, Minute, Sekunde
Beispiel: 2024 Mai 5. 10 Uhr 30 Minuten 30 Sekunden
rtc.adjust(DateTime(2024, 5, 5, 10, 30, 30));
*/
}
void loop()
{
// aktuelle Zeit holen
DateTime aktuell = rtc.now();
/*
Wochentag anzeigen
0 = Sonntag
1 = Montag
...
6 = Samstag
*/
switch (aktuell.dayOfTheWeek())
{
case 0:
Serial.print("Sonntag");
break;
case 1:
Serial.print("Montag");
break;
case 2:
Serial.print("Dienstag");
break;
case 3:
Serial.print("Mittwoch");
break;
case 4:
Serial.print("Donnerstag");
break;
case 5:
Serial.print("Donnerstag");
break;
case 6:
Serial.print("Samstag");
break;
}
// Leerzeichen hinzufügen
Serial.print(" ");
// Datum anzeigen
Serial.print(String(aktuell.day()) + ".");
/*
Monatsnamen anzeigen
1= Januar
2 = Februar
...
12 = Dezember
*/
Serial.print(" ");
switch (aktuell.month())
{
case 1:
Serial.print("Januar");
break;
case 2:
Serial.print("Februar");
break;
case 3:
Serial.print("M\u00e4rz");
break;
case 4:
Serial.print("April");
break;
case 5:
Serial.print("Mai");
break;
case 6:
Serial.print("Juni");
break;
case 7:
Serial.print("Juli");
break;
case 8:
Serial.print("August");
break;
case 9:
Serial.print("September");
break;
case 10:
Serial.print("Oktober");
break;
case 11:
Serial.print("November");
break;
case 12:
Serial.print("Dezember");
break;
}
Serial.print(" ");
Serial.print(String(aktuell.year()) + " ");
// Zeitangabe in Zeichenkette (String) umwandeln und anzeigen
char Zeit[] = "hh:mm:ss";
Serial.print("Uhrzeit: ");
Serial.print(aktuell.toString(Zeit));
// Temperatur ermitteln
String Temperatur = String(rtc.getTemperature());
// Anzeige im angelsächsisches Zahlenformat
// . durch , ersetzen
Temperatur.replace(".", ",");
Serial.println(" Temperatur: " + Temperatur + "°C");
delay(1000);
}
Letzte Aktualisierung: