Arduino Unoのシールドとして使用できるタッチパネル付きのバックライト付きフルカラーLCD 解像度は320x240 [pixel]

かなり普及している個体のため動作するドライバも複数あるが、下記ドライバがサンプルも過不足なく良い。
prenticedavid/MCUFRIEND_kbv
https://github.com/prenticedavid/MCUFRIEND_kbv
setup関数中のtft.setRotation()が描画の向きを設定する関数。これはあくまでも描画のみで、タッチパネルは後述の設定が必要。
0がArduinoUnoを正面から見て左側が上端の縦長表示。1がArduinoUnoと同じ正面の横長、
void setup(void)
{
tft.setRotation(0);
}
サンプルコード内の「TouchScreen_Calibr_native」を使用。
指示に従い、画面の8カ所をタッチし、キャリブレーションに必要なパラメータを取得する。パラメータはシリアルモニタに出力されるためコピーしておく。
MCUFRIEND_kbv ID=0x0154 240 x 320
const int XP=7,XM=A1,YP=A2,YM=6; //240x320 ID=0x0154
const int TS_LEFT=916,TS_RT=172,TS_TOP=158,TS_BOT=942;
PORTRAIT CALIBRATION 240 x 320
x = map(p.x, LEFT=916, RT=172, 0, 240)
y = map(p.y, TOP=158, BOT=942, 0, 320)
Touch Pin Wiring XP=7 XM=A1 YP=A2 YM=6
LANDSCAPE CALIBRATION 320 x 240
x = map(p.y, LEFT=158, RT=942, 0, 320)
y = map(p.x, TOP=172, BOT=916, 0, 240)
ソースコード中、変数定義してある2行を上記キャリブレーションで取得したものと置換。
#if 1
#include <Adafruit_GFX.h>
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;
#include <TouchScreen.h>
#define MINPRESSURE 200
#define MAXPRESSURE 1000
// ALL Touch panels and wiring is DIFFERENT
// copy-paste results from TouchScreen_Calibr_native.ino
//この2行
const int XP = 6, XM = A2, YP = A1, YM = 7; //ID=0x9341
const int TS_LEFT = 907, TS_RT = 136, TS_TOP = 942, TS_BOT = 139;
各サンプルコードや自作コード内でキャリブレーション後の結果を得るために、先ほどのコードを使用する。
縦向き使用、横向き使用それぞれに適した補正値を利用。
int pixel_x, pixel_y; //Touch_getXY() updates global vars
bool Touch_getXY(void)
{
TSPoint p = ts.getPoint();
pinMode(YP, OUTPUT);
pinMode(XM, OUTPUT);
digitalWrite(YP, HIGH);
digitalWrite(XM, HIGH);
bool pressed = (p.z > MINPRESSURE && p.z < MAXPRESSURE);
if (pressed) {
//ここの2行のmap関数をキャリブレーション補正値に置き換える。
pixel_x = map(p.x, TS_LEFT, TS_RT, 0, tft.width());
pixel_y = map(p.y, TS_TOP, TS_BOT, 0, tft.height());
//
}
return pressed;
}