03.M5Stak CoreInkのサンプル
3.M5Stak CoreInkのサンプル
サンプル
サンプルのスケッチは4つあります。- HelloWorld
画面表示例
スケッチは前回参照 - Button
回転ボタン、上面ボタン、電源ボタンの使い方
スケッチは下 - RTC_BM8563
時計の設定例。ただしこのスケッチではWi-Fiを使わないので検証と書込み時間分ずれてしまい、正確な秒表示ができない。
スケッチは下 - 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秒ごとに時刻更新(最小間隔)
}