M
M
MWM5 Library
1.0.9
検索
K

Terminal

ターミナル(コンソール)クラスの利用例
M5stackの320x200ドット液晶に固定幅ターミナルウインドウを表示します。
以下は画面出力の例です。
#include <mwm5.h>
#include <Arduino.h>
#include <M5Stack.h>
// ターミナルオブジェクトの生成
TWETerm_M5_Console the_screen(
64, 20,
{ 0, 16, 320, 192 }, M5);
void setup() {
// begin M5
M5.begin(true, false, true, false); // LCD, SD, Serial, I2C
// create font as #10 (東雲フォント16)
createFontShinonome16(10, 0, 0);
the_screen.set_font(10); // set font #10
the_screen.set_color(ALMOST_WHITE, M5.Lcd.color565(90, 0, 50);
// set color (fg, bg)
the_screen.set_cursor(2); // 0: no 1: curosr 2: blink cursor
the_screen.force_refresh(); // repaint now.
// initial message
the_screen << "the_screen:" << crlf;
}
void loop() {
// refresh screen
static uint32_t t_last;
uint32_t t_now = millis();
if (t_now - t_last > 32) {
the_screen.refresh();
t_last = t_now;
}
// press A button
if (M5.BtnA.wasReleased()) {
the_screen << "hello world!" << crlf;
}
if (M5.BtnB.wasReleased()) {
// force clear with whole redraw.
the_screen.clear_screen();
}
if (M5.BtnC.wasReleased()) {
// clear screen and set cursor home.
the_screen << "\033[2J\[033H";
}
}
まずターミナルオブジェクトを生成します。ここでは最大64カラム、最大20行、左上から (0,16)の位置に(320,192)サイズの領域とします。
// ターミナルオブジェクトの生成
TWETerm_M5_Console the_screen(
64, 20,
{ 0, 16, 320, 192 }, M5);
次に「東雲フォント16ドット」をフォントID=10で生成しています。フォントを管理するオブジェクトはライブラリ内部で生成・管理されます。
void setup() {
...
// create font as #10 (東雲フォント16)
createFontShinonome16(10, 0, 0);
ターミナルにフォントなどを基本的な設定を行います。フォントを先ほどのフォントID=10として指定し、フォントの文字色と背景色を指定します。カーソルを2(ブリンク表示)とします。最後にforece_refresh()にて初期描画を行います。
void setup() {
...
the_screen.set_font(10); // set font #10
the_screen.set_color(ALMOST_WHITE, color565(90, 0, 50);
// set color (fg, bg)
the_screen.set_cursor(2); // 0: no 1: curosr 2: blink cursor
the_screen.force_refresh(); // repaint now.
setup()が終了したらloop()での周期実行中に、一定時間ごとに画面の描画を行います。ここでは32ms以上経過したら再描画するようにしています。
void loop() {
// refresh screen
static uint32_t t_last;
uint32_t t_now = millis();
if (t_now - t_last > 32) {
the_screen.refresh(); // 再描画!
t_last = t_now;
}
以下の例ではボ タン Aでは"hello world!" + 改行の出力、ボタンBでは画面のクリア、ボタンCも同様に画面のクリア(エスケープシーケンスによる)を行います。
void loop() {
...
// press A button
if (M5.BtnA.wasReleased()) {
the_screen << "hello world!" << crlf;
}
if (M5.BtnB.wasReleased()) {
// force clear with whole redraw.
the_screen.clear_screen();
}
if (M5.BtnC.wasReleased()) {
// clear screen and set cursor home.
the_screen << "\033[2J\[033H";
}
最終更新 2yr ago