本記事について
M5Unifiedライブラリの始め方のプラグラムが実行できたので、次はこのプラグラムを理解する。
前提
M5AtomS3でHello World! with mac
該当のコード
長くはないため全部貼る
#include <M5Unified.h> // M5Unifiedライブラリをプログラムで使用可能にします。
// グローバル変数(プログラム全体で使用する変数の定義をします。)
uint32_t count;
// setup関数は起動時に一度だけ実行されます。
// 主に初期化処理を記述します。
void setup() {
auto cfg = M5.config(); // M5Stack初期設定用の構造体を代入
// configを設定する場合はここで設定
// 例
// cfg.external_spk = true;
M5.begin(cfg); // M5デバイスの初期化
M5.Display.setTextSize(3); // テキストサイズを変更
M5.Display.print("Hello World!!"); // 画面にHello World!!と1行表示
Serial.println("Hello World!!"); // シリアルモニターにHello World!!と1行表示
count = 0; // countを初期化
}
// loop関数は起動している間ずっと繰り返し実行されます。
// センサーから値を取得したり、画面を書き換える動作等をおこないます。
void loop() {
M5.Display.setCursor(0, 20); // 文字の描画座標(カーソル位置)を設定
M5.Display.printf("COUNT: %d\n", count); // countを画面に表示
Serial.printf("COUNT: %d\n", count); // countをシリアルに表示
count++; // countを1増やす
delay(1000); // 1秒待つ
}
これを読んで以下の疑問が浮かんだ。
- config, begin って何?
- M5.Displayって何?
- setTextSizeの3って何?
- Hello World!を画面に収めるにはどうすればいい?
これらを一つずつ調べていく。
config, begin って何?
これに関してはM5Unifiedへの移植のポイントに書いてあった。
configのドキュメントはここ
定義ジャンプでサクッと見れるためコード直で見るのもいいと思う
begin が具体的に何をやってるかは調べてないけど、config は begin のためのパラメータであることは理解した。
M5.Displayって何?
begin と同じく M5Unifiedへの移植のポイントの「画面描画について」の項目に書いてある。
画面付きのデバイスではM5.DisplayでM5GFXのAPIを使用することができます。定義は必要ありません。
M5.Display は M5GFX そのもの
M5GFX &Display = _primaryDisplay;
左側にリンクがある
setTextSizeの3って何?
ドキュメントには単位は書いてなかった。(2023/06時点)
まぁ大体わかればいいだろうということで実験してみた。
size 1,2,3でそれぞれ ATOM S3 の画面に出してみた。
#include <M5Unified.h>
void setup()
{
auto cfg = M5.config();
M5.begin(cfg);
USBSerial.begin(115200);
M5.Display.setTextSize(1);
M5.Display.print("aaaaaaaaaa");
M5.Display.setCursor(0, 20);
M5.Display.setTextSize(2);
M5.Display.print("aaaaaaaaaa");
M5.Display.setCursor(0, 40);
M5.Display.setTextSize(3);
M5.Display.print("aaaaaaaaaa");
}
void loop()
{
}
結果が以下。
デフォルトのフォント等の設定の場合、ATOM S3 では
TextSize 1 : a が10個で半分くらい
TextSize 2 : a が10個でほぼ右端。これ以上入らなそう
TextSize 3 : a が7個分入る
Hello World!を画面に収めるにはどうすればいい?
#include <M5Unified.h>
void setup()
{
auto cfg = M5.config();
M5.begin(cfg);
USBSerial.begin(115200);
M5.Display.setTextSize(1);
M5.Display.print("Hello World!");
M5.Display.setCursor(0, 20);
M5.Display.setTextSize(1.5);
M5.Display.print("Hello World!");
M5.Display.setCursor(0, 40);
M5.Display.setTextSize(2);
M5.Display.print("Hello World!");
}
void loop()
{
}
TextSize 2 だと入らない。 1.5 なら入ることがわかった。