pdf-icon

Arduino入門

2. デバイス&サンプル

Tough 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)

使用示例:

cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#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構造体のデータを取得できます。内部に含まれるメンバーとメソッドは以下の通りです。

cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
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

cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
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()をループに追加してタッチデータをリフレッシュする必要があります。

使用示例:

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
#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