M5Stack Core2 for AWSの画面を指でなぞることにより図形を追従させます。
追従アプリの作成
追従アプリアプリ「touchtest.ino」を次のように作成します。
- 17行目で画面にタッチされた位置を取得します。
- 21行目でタッチされた位置に円を描画します。
- 29行目でYが240以上はボタンのエリアと判断します。
- 40行目でボタンを押した場合、300ミリ秒振動モーターを動かします。
- 24行目でタッチ中は緑色LEDを消灯し、56行目でタッチが離れたら緑色LEDを点灯します。
touchtest.ino
#include <M5Core2.h>
TouchPoint_t posold;
void setup() {
M5.begin(true, true, true, true); // Core2初期化
M5.Lcd.fillScreen(WHITE); // 画面初期化
M5.Lcd.setTextColor(BLACK, WHITE);
M5.Lcd.setTextSize(2);
M5.Lcd.setCursor(10, 10);
M5.Lcd.printf("DISPLAY Test!");
}
void loop() {
static bool touch = false;
static uint16_t color = BLACK; // 描画色
static uint16_t colorOld = BLACK; // ボタンフィードバック用
TouchPoint_t pos = M5.Touch.getPressPoint();
if (pos.x != -1) {
// 描画
M5.Lcd.drawCircle(posold.x, posold.y, 50, WHITE);
M5.Lcd.drawCircle(pos.x, pos.y, 50, color);
posold = pos;
if (!touch) {
// タッチ中は緑色LEDを消す
touch = true;
M5.Axp.SetLed(false);
}
if (pos.y > 240) {
// Yが240以上はボタンのエリア
uint16_t colorNew;
if (pos.x < 109) {
colorNew = RED;
} else if (pos.x > 218) {
colorNew = BLUE;
} else if (pos.x >= 109 && pos.x <= 218) {
colorNew = GREEN;
}
if (colorNew != colorOld) {
// ボタンを押した場合には300ミリ秒振動モーターを動かす
color = colorNew;
colorOld = color;
M5.Axp.SetLDOEnable(3, true);
delay(300);
M5.Axp.SetLDOEnable(3, false);
}
}
// 画面にタッチした座標を表示
M5.Lcd.setCursor(10, 10);
M5.Lcd.printf("DISPLAY Test!");
M5.Lcd.setCursor(0, 26);
M5.Lcd.printf(" X:%3d\n Y:%3d", pos.x, pos.y);
} else {
if (touch) {
// タッチが離れたら緑色LEDを点ける
touch = false;
colorOld = BLACK;
M5.Axp.SetLed(true);
}
}
delay(1);
}
追従アプリの実行
追従アプリアプリ「touchtest.ino」を実行し、M5Stack Core2 for AWSで指を接触させると、次のように接触した位置に円形図形が表示されます。
