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で指を接触させると、次のように接触した位置に円形図形が表示されます。