03.M5PaperS3でタッチテスト
03.M5PaperS3でタッチテスト
説明
Arduino-IDE > ファイル > スケッチ例 > (カスタムライブラリのスケッチ例) M5GFX > Basic > TouchTest > TouchTest.ino を修正して実行しました。2点までのタッチ場所を●✖で表示して、そのx,y位置を表示します。
スケッチ
//9 TouchTest.ino
// タッチした場所●✖とx,y表示
#include <epdiy.h> // 電子ペーパードライバー
#include <M5GFX.h> // M5Stack用グラフィックライブラリ
M5GFX display; // M5GFXのインスタンスを作成
void setup() {
display.init(); // パネルを初期化
display.setFont(&fonts::Font4); // 高さ26px 英数字
if (!display.touch()) { // タッチデバイスが無効なら
display.setTextDatum(textdatum_t::middle_center); // 文字は左右上下中央を基準
display.drawString("Touch not found.", display.width() / 2,
display.height() / 2); // 画面中央に表示
}
display.setEpdMode(epd_mode_t::epd_fastest); // 高速描画 低品質に設定
display.startWrite(); // バッファを効率的に使用開始
}
void loop() {
static bool drawed = false; // 描画変数=描画していない
lgfx::touch_point_t tp[3];
int nums = display.getTouchRaw(tp, 3);// タッチ情報を取得
if (nums) {
for (int i = 0; i < nums; ++i) {
display.setCursor(16, 16 + i * 24); // カーソル位置
display.printf("Raw X:%03d Y:%03d", tp[i].x, tp[i].y); // x,y表示
}
display.convertRawXY(tp, nums); // getTouchRaw()で取得した情報を変換
for (int i = 0; i < nums; ++i) {
display.setCursor(16, 128 + i * 24); // カーソル位置
display.printf("Convert X:%03d Y:%03d", tp[i].x, tp[i].y); // x,y表示
}
display.display(); // メモリ上のデータをパネルに表示
display.setColor(display.isEPD() ? TFT_BLACK : TFT_WHITE); // 文字はePaperなら黒(白地) それ以外は白
for (int i = 0; i < nums; ++i) {
int s = tp[i].size + 3;
switch (tp[i].id) {
case 0: // 1点タッチで●を表示
display.fillCircle(tp[i].x, tp[i].y, s);
break;
case 1: // 2点タッチで✖を表示
display.drawLine(tp[i].x - s, tp[i].y - s, tp[i].x + s, tp[i].y + s);
display.drawLine(tp[i].x - s, tp[i].y + s, tp[i].x + s, tp[i].y - s);
break;
default: // △を表示しない ICは5点までだが製品紹介では2点をサポートとなっている
display.fillTriangle(tp[i].x - s, tp[i].y + s, tp[i].x + s,
tp[i].y + s, tp[i].x, tp[i].y - s);
break;
}
display.display(); // メモリ上のデータをパネルに表示
}
drawed = true; // 描画した
} else if (drawed) { // もし描画していれば
drawed = false; // 描画変数を戻す
display.waitDisplay(); // パネルの描画が終わるまで待機
display.clear(); // パネルをクリア
display.display(); // メモリ上のデータをパネルに表示
}
vTaskDelay(1); // 1tickの間タスクをブロック
}
* flash memory(最大1.3MB)は、スケッチが37%使用。RAM(最大327kB)は、global変数が6%を使用、local変数で307kB使用可能。(1000byte=1kbyteで計算。パーテーションはDefaltです)