リアルタイムクロック¶
UNO R4 WiFiのマイクロコントローラー(RA4M1)にはRTC(リアルタイムクロック)が統合されています。RTCは、バッテリーなどのバックアップ電源によって、メインの電源が切断されていても動作することができる自律的な時計モジュールです。これにより、RTCは、家庭用オートメーションシステムでのタイムスケジュールされたタスクの実行や、データログ記録アプリケーションでのデータポイントのタイムスタンプ付けなど、様々なアプリケーションで非常に柔軟に使用できます。
注釈
UNO R4 WiFiには、ボードが電源を失ってもオンボードRTCの動作を維持するVRTCピンがあります。この機能を利用するためには、VRTCピンに1.6Vから3.6Vの電圧を適用してください。
定期的な繰り返しタスク¶
特定のユースケースでは、定期的に特定のタスクを実行する必要があります。周期的な割り込みを設定するためには、まず周期的なコールバック関数を初期化する必要があります。以下は、周期的な割り込みを使用して2秒ごとにLEDを点滅させるArduinoコードの例です。
コードのアップロード
03-rtc.ino
ファイルを elite-explorer-kit-main\r4_new_feature\03-rtc
で開くか、以下のコードをArduino IDEに貼り付けてください。
コードの説明
コンポーネントとライブラリの初期化
#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"
: RTCライブラリを含めます。volatile bool irqFlag = false;
: ボライルなブール型フラグを宣言します。volatile
は、割り込みによって安全に変数にアクセスまたは変更できることを保証します。volatile
の詳細については、 Arduinoのvolatileドキュメント を参照してください。bool ledState = false;
: LEDの状態を追跡するためのブール型を宣言します。const int led = LED_BUILTIN;
: 内蔵LEDピンのための定数を宣言します。pinMode(led, OUTPUT);
: LEDピンを出力に設定します。Serial.begin(9600);
: シリアル通信を9600ボーで初期化します。RTC.begin();
: RTCを初期化します。
リアルタイムクロックの設定
RTCTime mytime(30, Month::JUNE, 2023, 13, 37, 00, DayOfWeek::WEDNESDAY, SaveLight::SAVING_TIME_ACTIVE); RTC.setTime(mytime);
RTCTime mytime(...);
: 特定の日付と時刻で初期化されたRTCTime
オブジェクトを作成します。RTC.setTime(mytime);
: 初期化された時刻でRTCを設定します。
定期的なコールバックの設定と確認
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(...);
: 2秒ごとにトリガーされる定期的なコールバックを設定します。期間は以下の列挙で指定できます: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() {...}
: コールバックがトリガーされたかどうかを確認します。トリガーされていれば、LEDの状態をトグルします。void periodicCallback() {...}
: トリガーされたときに``irqFlag = true``を設定するコールバック関数です。
参照