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です)