Echtzeituhr¶
Die RTC (Real-Time Clock, Echtzeituhr) ist in den Mikrocontroller des UNO R4 WiFi (RA4M1) integriert. Die RTC ist ein autonomes Uhrenmodul, das auch dann funktioniert, wenn die Hauptstromversorgung unterbrochen ist, dank einer Backup-Stromquelle wie einer Batterie. Dies macht die RTC äußerst vielseitig einsetzbar, beispielsweise für die Planung zeitgesteuerter Aufgaben in Hausautomatisierungssystemen oder zur Zeitstempelung einzelner Datenpunkte in Datenlogger-Anwendungen.
Bemerkung
Der UNO R4 WiFi verfügt über einen VRTC-Pin, der den Betrieb der integrierten RTC auch bei Stromausfall des Boards aufrechterhält. Um diese Funktion zu nutzen, sollte eine Spannung zwischen 1,6 und 3,6 V an den VRTC-Pin angelegt werden.
Geplante Wiederkehrende Aufgaben¶
In bestimmten Anwendungsfällen müssen Sie möglicherweise spezifische Aufgaben in regelmäßigen Abständen ausführen. Um periodische Unterbrechungen einzurichten, müssen Sie zunächst eine periodische Rückruffunktion initialisieren. Unten finden Sie ein Arduino-Codebeispiel, das eine periodische Unterbrechung verwendet, um eine LED alle 2 Sekunden blinken zu lassen.
Code Hochladen
Öffnen Sie die Datei 03-rtc.ino
, die sich im Verzeichnis elite-explorer-kit-main\r4_new_feature\03-rtc
befindet, oder fügen Sie den folgenden Code in Ihre Arduino IDE ein.
Code-Erklärung
Initialisierung von Komponenten und Bibliotheken
#include "RTC.h" volatile bool irqFlag = false; bool ledState = false; const int led = LED_BUILTIN; void setup() { pinMode(led, OUTPUT); Serial.begin(9600); RTC.begin(); }
#include "RTC.h"
: Bindet die RTC-Bibliothek ein.volatile bool irqFlag = false;
: Deklariert eine volatile Boolesche Flagge.volatile
stellt sicher, dass die Variable durch einen Interrupt sicher zugegriffen oder geändert werden kann. Weitere Details zuvolatile
finden Sie in der Arduino-Volatile-Dokumentation.bool ledState = false;
: Deklariert eine Boolesche Variable, um den Zustand der LED zu verfolgen.const int led = LED_BUILTIN;
: Deklariert eine Konstante für den eingebauten LED-Pin.pinMode(led, OUTPUT);
: Stellt den LED-Pin als Ausgang ein.Serial.begin(9600);
: Initialisiert die serielle Kommunikation mit 9600 Baud.RTC.begin();
: Initialisiert die RTC.
Einrichtung der Echtzeituhr
RTCTime mytime(30, Month::JUNE, 2023, 13, 37, 00, DayOfWeek::WEDNESDAY, SaveLight::SAVING_TIME_ACTIVE); RTC.setTime(mytime);
RTCTime mytime(...);
: Erstellt einRTCTime
-Objekt und initialisiert es mit einem spezifischen Datum und Uhrzeit.RTC.setTime(mytime);
: Stellt die RTC mit der initialisierten Zeit ein.
Periodische Rückruffunktion Einrichten und Überprüfen
if (!RTC.setPeriodicCallback(periodicCallback, Period::ONCE_EVERY_2_SEC)) { Serial.println("ERROR: periodic callback not set"); } void loop() { if (irqFlag) { Serial.println("Timed CallBack"); ledState = !ledState; digitalWrite(led, ledState); irqFlag = false; } } void periodicCallback() { irqFlag = true; }
RTC.setPeriodicCallback(...);
: Legt eine periodische Rückruffunktion fest, die alle 2 Sekunden ausgelöst wird. Der Zeitraum kann mit den folgenden Enumerationen angegeben werden:ONCE_EVERY_2_SEC
ONCE_EVERY_1_SEC
N2_TIMES_EVERY_SEC
N4_TIMES_EVERY_SEC
N8_TIMES_EVERY_SEC
N16_TIMES_EVERY_SEC
N32_TIMES_EVERY_SEC
N64_TIMES_EVERY_SEC
N128_TIMES_EVERY_SEC
N256_TIMES_EVERY_SEC
void loop() {...}
: Überprüft, ob der Rückruf ausgelöst wurde. Wenn ja, ändert den Zustand der LED.void periodicCallback() {...}
: Die Rückruffunktion setztirqFlag = true
, wenn sie ausgelöst wird.
Referenz