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