02.T-WatchのRTC
02.T-WatchのRTC
説明
スケッチ例 RTC.ino の解析です。Arduino-IDE > ファイル > スケッチ例 > TTGO TWatch Library > BasicUnit > RTC > RTC.ino
を参照しました。
2019/8/12 15:00:53から起動開始し、15:01になるとRTCの割込みで画面表示が3回点滅します。その後は時計動作を続けます。文字表示は、LovyanGFXに変更します。
注意:ボードマネージャで esp32 by Espressif SYstems 3.0.? にupdateしてしまったらエラーがでるので、2.0.?に戻してください。
スケッチ
// RTC.ino
// 起動で15:0:53から開始し、15:01になると表示が3回点滅、その後時計を継続
#define LGFX_AUTODETECT // 機種の自動認識
#include <LovyanGFX.hpp> // ヘッダをinclude
#include <LGFX_AUTODETECT.hpp> // クラス"LGFX"を用意
static LGFX lcd; // LGFXのインスタンスを作成
#define LILYGO_WATCH_2020_V3 // T-Watch 2020v3を使用
#include <LilyGoWatch.h> // LilyGoWatchを使用
TTGOClass *ttgo; //
bool rtcIrq = false; // 割込変数
void SetFont() { // Font等初期化関数
ttgo = TTGOClass::getWatch(); // ttgoと略します
ttgo->begin(); // 本体の初期化
lcd.init(); // LCDの初期化
lcd.setRotation(2); // 画面回転 0-3 (4-7で上下反転)
lcd.setBrightness(128); // バックライト輝度 0-255(実際は256通りの輝度ではない)
lcd.fillScreen(TFT_BLACK); // 全画面黒
lcd.setFont(&fonts::lgfxJapanGothic_28); // 固定幅ゴシック体 8,12,16,20,24,28,32,36,40
lcd.setTextColor(TFT_GREEN, TFT_BLACK); // (緑字,黒地)
lcd.setTextSize(1, 2); // 文字サイズの倍数(横,縦)
lcd.setTextWrap(true); // 自動折返し
}
void setup() {
SetFont(); // Font等初期化関数へ
pinMode(RTC_INT_PIN, INPUT_PULLUP); // RTCpinをプルアップのデジタル入力pinとする(負論理)Lで割込み
attachInterrupt( // RTC_INT_pinの立下がりを検出しrtcIrp=1とする
RTC_INT_PIN, [] {
rtcIrq = 1;
},
FALLING);
ttgo->rtc->disableAlarm(); // RTCアラームのトリガーを無効にします
ttgo->rtc->setDateTime(2019, 8, 12, 15, 0, 53); // RTC時刻を(年,月,日,時,分,秒)とする
ttgo->rtc->setAlarmByMinutes(1); // RTCアラームを1分時に設定
ttgo->rtc->enableAlarm(); // RTCアラームを有効とする
}
void loop() {
lcd.setTextColor(random(0xFFFF)); // 乱数による文字色
lcd.setCursor(45, 50); // カーソル位置
lcd.print("T-Watch RTC"); // (文字列,x,y,Font) タイトル
lcd.setCursor(5, 118); // カーソル位置
lcd.setTextColor(TFT_YELLOW, TFT_BLACK); // (黄字,黒地)
lcd.setFont(&fonts::Font7); // Font 7セグ
lcd.print(ttgo->rtc->formatDateTime()); // 時:分:秒の文字列表示
lcd.setFont(&fonts::lgfxJapanGothic_28); // 固定幅ゴシック体 8,12,16,20,24,28,32,36,40
if (rtcIrq) { // 割込変数が1なら
rtcIrq = 0; // 割込変数を0にする
detachInterrupt(RTC_INT_PIN); // RTC_INT_pinからの割込みをoff
ttgo->rtc->resetAlarm(); // アラームを停止する
int i = 3; // 繰返し回数
while (i--) { // 3回繰返す
lcd.fillScreen(TFT_RED); // 全画面赤
lcd.setTextColor(TFT_WHITE, TFT_RED); // (白字,赤地)
lcd.setCursor(50, 110); // カーソル位置
lcd.print("RTCアラーム"); // 表示
delay(500); // 0.5秒待つ
lcd.fillScreen(TFT_BLACK); // 全画面黒
lcd.setTextColor(TFT_WHITE, TFT_BLACK); // (白字,黒地)
lcd.setCursor(50, 110); // カーソル位置
lcd.print("RTCアラーム"); // 表示
delay(500); // 0.5秒待つ
}
}
delay(1000); // 1秒待つ
}
* flash memory(6.5Mbyte)のうち、スケッチが12%使用。RAM(4.5Mbyte)のうち、global変数が0%使用、local変数で4.5Mbyte使用可能。(1000byte=1kbyteで計算)