Bemerkung
Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.
Warum beitreten?
Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [ hier ] und treten Sie heute bei!
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.
1/*
2 This code is for an Arduino Uno R4 board and it toggles an LED on and
3 off every 2 seconds using a Real Time Clock (RTC) for timing. It initializes
4 the RTC, sets a specific time, and establishes a periodic callback to toggle
5 the LED state. When the callback is triggered, it toggles the LED and outputs
6 a debugging message to the serial monitor.
7
8 Board: Arduino Uno R4
9*/
10
11// Include the RTC library
12#include "RTC.h"
13
14volatile bool irqFlag = false; // Flag to indicate a periodic callback.
15bool ledState = false; // Current LED state: true for ON and false for OFF
16const int led = LED_BUILTIN; // Pin number for the built-in LED
17
18void setup() {
19 pinMode(led, OUTPUT); // Configure the LED pin as output
20
21 Serial.begin(9600);
22
23 // Initialize the RTC
24 RTC.begin();
25
26 // Set an arbitrary time to the RTC (required for RTC.setPeriodicCallback to work)
27 RTCTime mytime(30, Month::JUNE, 2023, 13, 37, 00, DayOfWeek::WEDNESDAY, SaveLight::SAVING_TIME_ACTIVE);
28 RTC.setTime(mytime);
29
30 // Set the periodic callback to trigger every 2 seconds
31 if (!RTC.setPeriodicCallback(periodicCallback, Period::ONCE_EVERY_2_SEC)) {
32 Serial.println("ERROR: periodic callback not set");
33 }
34}
35
36void loop() {
37 // Check if the periodic callback has been triggered
38 if (irqFlag) {
39 Serial.println("Timed CallBack"); // Output a debugging message
40 ledState = !ledState; // Toggle the LED state
41 digitalWrite(led, ledState); // Update the LED
42 irqFlag = false; // Reset the flag
43 }
44}
45
46// This is the callback function to be passed to RTC.setPeriodicCallback()
47void periodicCallback() {
48 // Set the flag to true to indicate the callback has been triggered
49 irqFlag = true;
50}
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.volatilestellt sicher, dass die Variable durch einen Interrupt sicher zugegriffen oder geändert werden kann. Weitere Details zuvolatilefinden 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_SECONCE_EVERY_1_SECN2_TIMES_EVERY_SECN4_TIMES_EVERY_SECN8_TIMES_EVERY_SECN16_TIMES_EVERY_SECN32_TIMES_EVERY_SECN64_TIMES_EVERY_SECN128_TIMES_EVERY_SECN256_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