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で計算)