pdf-icon

Arduino入門

2. デバイス&サンプル

タッチスクリーン

タッチ情報

getTouch

関数プロトタイプ:

uint_fast8_t getTouch(touch_point_t *tp, uint_fast8_t count = 1)

機能説明:

  • タッチパネルのタッチ情報を取得します

引数:

  • tp:タッチポイントへのポインタ
  • count:タッチポイント数、デフォルトは1

戻り値:

  • uint_fast8_t:タッチポイント数

getTouchRaw

関数プロトタイプ:

uint_fast8_t getTouchRaw(touch_point_t *tp, uint_fast8_t count = 1)

機能説明:

  • タッチパネルの生のタッチ情報を取得します

引数:

  • tp:タッチポイントへのポインタ
  • count:タッチポイント数、デフォルトは1

戻り値:

  • uint_fast8_t:タッチポイント数
説明:
1.この関数はgetTouchとの違いとして、getTouchRawが返すタッチポイントデータは処理されておらず、生のタッチ座標や圧力値を含みます。より精度の高いタッチデータが必要な場合に適しています。
2.両関数の使い方はこちらのサンプルを参照してください。

convertRawXY

関数プロトタイプ:

void convertRawXY(touch_point_t *tp, uint_fast8_t count = 1)

機能説明:

引数:

  • tp:タッチポイント構造体へのポインタ(touch_point_tについて)
  • count:タッチポイント数、デフォルトは1

戻り値:

  • null

画面キャリブレーション

calibrateTouch

関数プロトタイプ:

void calibrateTouch(uint16_t* parameters, const T &color_fg, const T &color_bg, uint8_t size = 10)

機能説明

  • タッチパネルをキャリブレーションします。最初の引数にポインタを渡すことでキャリブレーション値を取得できます。この値をフラッシュなどに保存し、次回起動時にsetTouchCalibrateを使うことで手動キャリブレーションを省略できます。

引数:

  • parameters:キャリブレーション値
  • color_fg:前景色
  • color_bg:背景色
  • size:タッチポイントサイズ

戻り値:

  • null

setTouchCalibrate

関数プロトタイプ:

void setTouchCalibrate(uint16_t *parameters)

機能説明:

  • calibrateTouchで得られたキャリブレーション値を使ってキャリブレーションを行います

引数:

  • parameters:キャリブレーション値を含むuint16_t配列へのポインタ、配列長は6

戻り値:

  • null
説明
このプログラムでは初回ダウンロード・リセット時のみ画面キャリブレーション手順が表示され、それ以外の場合は初回キャリブレーション後に保存されたキャリブレーション値のみが表示されます。

サンプルプログラム:

cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
#include <Arduino.h>
#include <Preferences.h>
#include <M5GFX.h>

M5GFX display;
uint16_t w;
uint16_t h;
const char* NAMESPACE = "m5_data";
const char* DATA_KEY = "user_data";
struct Calibration {
  bool calibration_flag = false;
  uint16_t touch_point[8];//4 point, each has (X,Y)
};


Calibration Cal;

void setup() {
    display.begin();

    display.setRotation(3);
    if(display.isEPD())
    {
        display.setColorDepth(8);//電子ペーパー製品は最大8ビットのビット深度をサポートします。
        display.setEpdMode(epd_fastest);
    }
    else
    {
        display.setColorDepth(16);
    }
    
    display.clear(TFT_WHITE);
    display.setFont(&fonts::FreeMonoBoldOblique12pt7b);
    display.setTextColor(TFT_BLACK);
    display.setTextSize(1);
    display.setCursor(0, 0);
    
    // 設定領域の初期化
    Preferences preferences;
    
    // 名前空間を開く(存在しない場合は作成)
    preferences.begin(NAMESPACE, false); // false -- 読み書きモード
    size_t readBytes = preferences.getBytes(DATA_KEY, &Cal, sizeof(Calibration));
    // データが正常に読み込まれたか確認
    if (readBytes == sizeof(Calibration)) {
        if(Cal.calibration_flag){
            display.setTouchCalibrate(Cal.touch_point);
            for (int i=0; i<8; i++) {
                display.printf("%d  ", Cal.touch_point[i]);
            }
            // display.setTextDatum(top_center);
            display.println("キャリブレーション設定データの読み込みに成功しました!");
        }    
    } 
    else {
        // デフォルト初期化
        display.calibrateTouch(Cal.touch_point, BLACK, YELLOW);
        display.clear();
        display.println("キャリブレーションデータの設定に成功しました。以下に表示します:\n");

        for (int i=0; i<8; i++) {
            display.printf("%d  ", Cal.touch_point[i]);
        }
        display.println();
        Cal.calibration_flag = true;

        // キャリブレーションデータを保存
        size_t writtenBytes = preferences.putBytes(DATA_KEY, &Cal, sizeof(Calibration));
        
        if (writtenBytes == sizeof(Calibration)) {
            display.println("\nキャリブレーションデータの保存に成功しました");
        } else {
            display.println("\nキャリブレーションデータの保存に失敗しました");
        }
        
        // 名前空間を閉じる
        preferences.end();
    }
}

void loop() {
}
On This Page