03.M5Stak CoreInkのサンプル


3.M5Stak CoreInkのサンプル

サンプル

サンプルのスケッチは4つあります。
  1. HelloWorld
    画面表示例
    スケッチは前回参照
  2. Button
    回転ボタン、上面ボタン、電源ボタンの使い方
    スケッチは下
  3. RTC_BM8563
    時計の設定例。ただしこのスケッチではWi-Fiを使わないので検証と書込み時間分ずれてしまい、正確な秒表示ができない。
    スケッチは下
  4. FactoryTest
    最初にインストールしてあったスケッチ
    時刻 :40x55 (Num_55x40.cpp)
    年月日:18x29 (Num_18x29.cpp)
    その他: 8x16
    スケッチは略。字を大きくするにはフォントデータが必要。日本語も

スケッチ

Buttonのスケッチ

#include "M5CoreInk.h"                   // 
Ink_Sprite InkPageSprite(&M5.M5Ink);     //
void ButtonTest(char* str) {             // 画面表示の関数
  InkPageSprite.clear();                 //
  InkPageSprite.drawString(35, 59, str); // (x,y)に文字列を描く
  InkPageSprite.pushSprite();            // 画面更新
  delay(2000);                           // 2秒待つ
}
void setup() {
  M5.begin();                         // E-Ink,RTC,I2C,ブザーを初期化
  if ( !M5.M5Ink.isInit()) {          // 初期化出来なければ
    Serial.printf("Ink Init faild");  // PCのシリアルモニタにエラー表示
  }
  M5.M5Ink.clear();                   // 画像クリア ここまではお決まり
  delay(1000);                        // 1秒待つ
  if ( InkPageSprite.creatSprite(0, 0, 200, 200, true) != 0 ) {
    // 画像領域が作成できなければ
    Serial.printf("Ink Sprite creat faild");  // PCのシリアルモニタにエラー表示
  }
}
void loop() {
  if ( M5.BtnUP.wasPressed()) ButtonTest("Btn UP Pressed");     //ボタンを上に回したら表示
  if ( M5.BtnDOWN.wasPressed()) ButtonTest("Btn DOWN Pressed"); //ボタンを下に回したら表示
  if ( M5.BtnMID.wasPressed()) ButtonTest("Btn MID Pressed");   //ボタンを押し込んだら表示
  if ( M5.BtnEXT.wasPressed()) ButtonTest("Btn EXT Pressed");   //上面ボタンを押したら表示
  if ( M5.BtnPWR.wasPressed()) {    // 電源ボタンを押したら(電源off)
    ButtonTest("Btn PWR Pressed");  // 表示関数へ
    M5.PowerDown();//しばらくすると上面緑LED消灯。表示は薄くならない。電源onは電源ボタンを押す。
  }
  M5.update();                      // ボタンとブザーを更新
}

RTC_BM8563のスケッチ

#include "M5CoreInk.h"                // 
Ink_Sprite InkPageSprite(&M5.M5Ink);  //
RTC_TimeTypeDef RTCtime;              // 定義
RTC_DateTypeDef RTCDate;              // 定義
char timeStrbuff[64];                 // 64文字の配列の宣言
  
void flushTime() {           // 現在時刻を画面表示
  M5.rtc.GetTime(&RTCtime);  // RTC時刻構造体を取得
  M5.rtc.GetData(&RTCDate);  // RTC日付構造体を取得
  sprintf(timeStrbuff, "%d/%02d/%02d %02d:%02d:%02d",
          RTCDate.Year, RTCDate.Month, RTCDate.Date,
          RTCtime.Hours, RTCtime.Minutes, RTCtime.Seconds);//文字列を作る
  InkPageSprite.drawString(10, 100, timeStrbuff);  // (x,y)に文字列を描く
  InkPageSprite.pushSprite();                      // 画面更新
}
void setupTime() {           // 年月日時分秒構造体設定
  RTCtime.Hours = 12;        // 時
  RTCtime.Minutes = 20;      // 分
  RTCtime.Seconds = 00;      // 秒
  M5.rtc.SetTime(&RTCtime);  // RTC時刻構造体を設定
  RTCDate.Year = 2021;       // 年
  RTCDate.Month = 2;         // 月
  RTCDate.Date = 9;          // 日
  M5.rtc.SetData(&RTCDate);  // RTC日付構造体を設定
}
void setup() {
  M5.begin();                         // E-Ink,RTC,I2C,ブザーを初期化
  if ( !M5.M5Ink.isInit()) {          // 初期化出来なければ
    Serial.printf("Ink Init faild");  // PCのシリアルモニタにエラー表示
    while (1) delay(100);             // ずっと待つ
  }
  M5.M5Ink.clear();                  // 画像クリア
  delay(1000);                       // 1秒待つ
  if ( InkPageSprite.creatSprite(0, 0, 200, 200, true) != 0 ) {
                                     // 画像領域が作成できなければ
    Serial.printf("Ink Sprite creat faild");//PCのシリアルモニタにエラー表示
  }
  setupTime();                       // 記入した時刻に設定
}
void loop() {
  flushTime();                       // 現在時刻を表示する関数へ
  delay(15000);                      // 15秒ごとに時刻更新(最小間隔)
}