RTC-Modul

Lese­zeit: 3 Minu­ten

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. Beim ers­ten Start muss das aktu­el­le Datum und die aktu­el­le Zeit manu­ell gesetzt wer­den, anschlie­ßend lauft die Zeit mit Hil­fe der Bat­te­rie weiter.

Benö­tig­te Bibliothek:

Sketch → Biblio­thek ein­bin­den → Biblio­the­ken verwalten

Die Metho­den der Biblio­thek RTC­Lib:
rtc -> Name des Moduls
aktu­ell -> Name der über rtc​.now() ermit­tel­ten Zeit

Schlüs­sel­wortAnzei­ge
adjust(DateTime(Jahr Monat, Tag, Stun­de, Minu­te, Sekunde);Bei­spiel:
rtc.adjust(DateTime(2020, 12, 13, 13, 31, 30));
aktuell.dayOfTheWeek()Num­mer des Wochentages
0 = Sonntag
1 = Montag
. . .
6 = Samstag
aktu​ell​.day()Tag
aktuell.month()Monat
1 = Januar
2 = Februar
...
12 = Dezember
aktuell.year() Jahr
aktuell.hour()Stun­de
aktuell.minute())Minu­te
aktuell.second())Sekun­de
Uhr­zeit als Array definieren:
char Zeit[] = "Uhr­zeit: 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()aktu­el­le Zeit holen

Bei­spiel: Zeit im Seri­el­len Moni­tor anzeigen

# 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
    rtc.adjust(DateTime(2020, 12, 13, 13, 31, 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
    0 = Januar
    1 = Februar
    ...
    12 = Dezember
  */
  Serial.print(" ");

  switch (aktuell.month())
  {
    case 0:
      Serial.print("Januar");
      break;
    case 1:
      Serial.print("Februar");
      break;
    case 2:
      Serial.print("M\341rz");
      break;
    case 3:
      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(aktuell.year());
  Serial.print(" ");

  // wenn Stunden < 10 -> führende 0 setzen
  Serial.print("Uhrzeit: ");
  if (aktuell.hour() < 10) Serial.print("0");
  Serial.print(aktuell.hour());
  Serial.print(':');

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

  // wenn Sekunden < 10 -> führende 0 setzen
  if (aktuell.second() < 10) Serial.print("0");
  Serial.print(aktuell.second());
  Serial.println();

  // Alternative mit char-Arrays
  char Datum[] = "DD.MM.YYYY";
  Serial.print(aktuell.toString(Datum));
  Serial.print(" ");

  char Zeit[] = "Uhrzeit: hh:mm:ss";
  Serial.println(aktuell.toString(Zeit));

  delay(1000);
}