Ein real time Clock (RTC) ist ein Modul für den Arduino das die "echte" Zeit vorgibt. Wenn man "millis" und Zähler des Arduino verwenden würde und die Uhr schnell ungenau werden. Ein RTC sorgt dafür das die Uhr auch über einen langen Zeitraum und dank der Batterie auch bei Spanungslosem Arduino genau bleibt.
Ardublock in der DuinoEdu Version hat einen RTC Block mit dabei, der sehr gut und einfach funktioniert. Damit kann nicht nur die genaue Uhrzeit und das Datum im Serial Monitor oder auf einem LCD / Oled, angezeigt, sondern auch Zeitschaltuhren und Wecker gebaut werden.
RTC Beispiel für eine Uhr mit Ardublock auf einem LCD Display
Als erstes muss im Block RTC: das aktuelle Datum und die aktuelle Uhrzeit eingetragen werden. Am besten 30 Sekunden früher als die aktuelle Uhrzeit, da das hochlanden einige Sekunden in Anspruch nimmt. Nun ist das Datum und die Uhrzeit auf dem RTC gespeichert und sollte nicht mehr hochgeladene werden, da sonst alles überschrieben wird. Einmal hochlanden, dann mit LCD oder Serial Monitor prüfen und dann diese Block am besten löschen. Lädt man diesen Block 10 Minuten später wieder hoch hat man eine Uhr die 10 Minuten nachgeht, wenn man vergisst die Uhrzeit zu ändern.
Dann am besten gleich noch die 3 Variablen anlegen, die man später braucht.
Die weiteren Böcke werden in einem "only every" Block abgefragt, damit der Arduino nicht jede Millisekunde "prüft" ob sich die Zeit geändert hat. Es reicht dies nur jede Sekunde zu machen, da sich die Zeit nun mal nur jede Sekunde ändert.
Als nächstes werden über die RTC Blöcke jeweils das Jahr, der Monat und der Tag auf Display angezeigt. Zur Auswahl jeweils den kleinen Hacken wählen und das Gewünschte Feld auswählen. Leider wird der Wochentag nicht angezeigt. Damit wird das Datum in der obersten Zeile angezeigt.
Über die drei Variablen Stunde, Minute und Sekunde wird nun die jeweilige Zeit in die Variable geschrieben. Natürlich könnte man den Block "RTC Hour, RTC Minute usw." auch direkt anzeigen, es braucht dafür keine Variable, warum ich das trotzdem mache, wird im nächsten Block deutlich.
Variablen können keine "0" vor einer Zahl anzeigen. Das heißt, auch wenn in der Variablen 01 oder 005 steht, dann wird immer 1 oder 5 ausgegeben. Das gleich passiert auch mit den RTC Blöcken. Ist es 12:34, dann steht in der Variablen 12 und 34. Ist es aber 01:07, dann gibt der Block 1 und 7 aus. damit würde folgende Uhrzeit auf dem Display angezeigt werden.
Uhrzeit ist | Uhrzeit angezeigt |
12:34 15 | 12:34 15 |
07:05 03 | 7 :5 3 |
12:04 09 | 12: 4 9 |
Den Stellen der Uhrzeit fehlen also nicht nur die "0" sondern die einer und zehner Stellen verschieben sich auch noch. Das ist auf einer Anzeige einfach nicht schön. Deshalb brauchen wir die Variablen vom Anfang, in dieser Variablen steht als Zahl eine "0" und eine "0" wird anzeigt. Über einen falls/sonst Block frage ich nun ab ist die Uhrzeit "einstellig" oder "zweistellig", ist es also eine 01,02,03 oder 12,13,44 Zahl.
- Ist die Zahl einstellig, dann setze ich die Uhrzeit eine Stelle zurück und schreibe die 0 vor diese Zahl
- Ist die Zahl zweistellig, dann setze ich die Uhrzeit eine stelle vor und ignoriere die 0
Das ganze nun für alle drei Blöcke mache und fertig ist die Uhr. Das Projekt bzw. die Ardublock Datei findet sich bei meinen Beispiel.