Touch

TOUGHの正面に2インチのレジスタンス式タッチスクリーンが統合され、駆動チップはNS2009です。M5Toughのライブラリ中、タッチ交互検出用のAPIシリーズが提供されています。詳細は以下の通りです。

Touch类

m5.begin()初期化では、インスタンスtouch`を作成して初期化しました。このインスタンスではAPIを使ってタッチインタラクション情報を取得できます。

  • 機能: タッチスクリーンを初期化。M5.begin中で、デフォルトでこの関数を呼び出ししてタッチスクリーンを初期化します。

  • void begin(bool EEPROMEnabled = true)

  • 機能: 画面タッチを校正(校正データはEEPROMに保存されます)。既に校正が完了した場合はTrueを返します、未完了の場合は校正画面に進み、ユーザーは画面の指示に従い指定の位置をタッチする必要があります。

  • bool calibrationTouch(TFT_eSPI *fb)

使用示例:

#include <M5Tough.h>

void setup()
{
    M5.begin(true, true, true, true);
    while (!M5.touch.calibrationTouch(&M5.Lcd));
    M5.Lcd.fillScreen(TFT_BLACK);
    M5.Lcd.print("Calibration Successfully");
}                                  

void loop()
{
    
}
  • 機能: タッチデータを読み取る

  • void read()

  • 機能: タッチ指のX座標を読み取る

  • int GetTouchX()

  • 機能: タッチ指のY座標を読み取る

  • int GetTouchY()

  • 機能: タッチ指の押下を検出

  • bool isPressed()

  • 機能: タッチ指の離脱を検出

  • bool isRelease()

  • 機能: タッチ指の移動を検出

  • bool isMoving()

  • 機能: タッチ指の離脱を待つ

  • bool WaitRelease()

  • 機能: タッチ指の離脱を待ち、タイムアウト時間を設定

  • bool WaitRelease(uint64_t AutoReleseTime)

  • 機能: タッチ点情報を読み取る、TouchPoint構造体を返します。この中にX、Y座標情報が含まれ、内部で演算子のオーバーロードが実装され、TouchPoint型の構造体を直接割り当て比較できます。

  • TouchPoint getPoint()

TouchPoint

getPointメソッドを呼び出すと、TouchPoint構造体のデータを取得できます。内部に含まれるメンバーとメソッドは以下の通りです。

class TouchPoint
{
public:
    TouchPoint(int16_t x_ = -1, int16_t y_ = -1);
    bool operator==(const TouchPoint &p);
    bool operator!=(const TouchPoint &p);
    bool operator=(const TouchPoint &p);

    bool Equals(const TouchPoint &p);

    void set(int16_t x_ = -1, int16_t y_ = -1);
    bool vaild();

    int16_t x, y;
};

ユーザーはTouchZoon構造体のインスタンスを作成することで、画面領域を作成し、内蔵のメソッドを利用して、TouchPointがその領域内に含まれるかを判断できます。

TouchZone

typedef struct TouchZone
{
    uint16_t x;
    uint16_t y;
    uint16_t w;
    uint16_t h;
    TouchZone() : x(-1), y(-1), w(0), h(0) {}
    TouchZone(uint16_t _x, uint16_t _y, uint16_t _w, uint16_t _h) : x(_x), y(_y), w(_w), h(_h){};
    bool contains(const TouchPoint &p)
    {
        if ((this->x == -1) || (this->y == -1) || (this->w == 0) || (this->h == 0))
            return false;
        if ((p.x >= this->x) && (p.x <= (this->x + this->w)) &&
            (p.y >= this->y) && (p.y <= (this->y + this->h)))
        {
            return true;
        }
        return false;
    }
} TouchZone_t;

タッチデータを働的に読み出す場合は、void update()をループに追加してタッチデータをリフレッシュする必要があります。

使用示例:

#include <M5Tough.h>

TouchZone clearBtn(0,0,50,50);

void setup()
{
    M5.begin(true, true, true, true);
    while (!M5.touch.calibrationTouch(&M5.Lcd));
    M5.lcd.drawString("CLEAR",5,5,3);
}                                  

void loop()
{
    M5.update();
    if(M5.touch.isPressed()){
        TouchPoint Point = M5.touch.getPoint();
        if(M5.touch.isMoving()){
            char buffer[24];
            sprintf(buffer, "X: %3d, Y: %3d", Point.x, Point.y);
            M5.Lcd.drawPixel(Point.x, Point.y ,TFT_GREEN);
            Serial.println(buffer);
        }
        if(clearBtn.contains(Point)){
            M5.lcd.fillScreen(TFT_BLACK);
            M5.lcd.drawString("CLEAR",5,5,3);
        }
    }
}


On This Page