ILI9341 240X320 Arduino
タッチパネルのついたTFTの小さいモニターを購入してみた。
アマゾンで2.4" TFT LCD ディスプレイシールドタッチパネルILI9341 240X320 と検索すると出てくるものでUNOにそのままさして使うタイプ。
https://www.amazon.co.jp/gp/product/B07L3PR7J5/ref=ppx_yo_dt_
b_asin_title_o00_s00?ie=UTF8&psc=1
購入してわかった事が、Arduino 用としてピン配置がUNOにあわせているものはパラレルでデータ転送するためほとんどあまりのピンがなくなる。搭載されているSDカードリーダーがSPIで経由するのなので、SPIを工夫して使う事になる。シリアルのバージョンも売っているので、他のピンをもっと使いたい場合は、そちらを購入した方がよい。
さて、この子ですが、パラレルでのサンプルプログラムは
https://www.adrive.com/public/qhnrxK/F0001414%202.4inch_Arduino_ILI9341_V3.0.zip
からDLしてくる。Adafruitのライブラリーをインポートしてついてくるものは、シリアル向けに作られているので、この子では動かない。内容をパラレル用に書き換えているが上のもの。
F0001414 2.4inch_Arduino_ILI9341_V3.0というZIPファイルを落としてきた。Readmeにあるように、"Arduino Demo_UNO&Mega2560\Install libraries"から Arduino library にコピーをとる。
サクッとDEMOの1から順番に実行する。画像の方は問題なく映るし、デモがサクサクと実行可能。
つっかかたのが、タッチ機能。収録されているサンプルプログラムのままでは動かない。
\F00014142.4inch_Arduino_ILI9341_V3.0\2.4inch_Arduino_ILI9341_V3.0\Arduino Demo_ArduinoUNO&Mega2560\Install libraries\TouchScreen
の下にもデモが入っていて、こちら側は動いた・・・よく比べると
#define YP A3 // must be an analog pin, use "An" notation!
#define XM A2 // must be an analog pin, use "An" notation!
#define YM 9 // can be a digital pin
#define XP 8 // can be a digital pin
となっているが、これをピンの番号をかえてしまう。
#define YP A1 // must be an analog pin, use "An" notation!
#define XM A2 // must be an analog pin, use "An" notation!
#define YM 7 // can be a digital pin
#define XP 6 // can be a digital pin
上記のように記載しておくとタッチスクリーンが反応する。
この状態でデモのなかに入っているTouchScreen_Calibr_kbvを実行する。(むろん上記のピン配置の部分を書き換えて)
終了すると、LEFT, RT(左、右)にどれだけ、TOP,BOT(トップとボトム)にどれだけと数字が表示される。この値を控えておく。
次に、tftpaintのデモを走らせる。これも同じく、
#define YP A1 // must be an analog pin, use "An" notation!
#define XM A2 // must be an analog pin, use "An" notation!
#define YM 7 // can be a digital pin
#define XP 6 // can be a digital pin
の部分は書き換えてから。
一応、これで動くのは動くが、課題が発生①タッチペンが触れたところから離れた箇所に線がかかれる → 座標の補正が必要 ②X方向(短編側)の正負が逆!という課題が発生
ここで、TS_MINX 、TS_MAXX 、TS_MINY 、TS_MAXY を定義している箇所を見つけて、先の補正の値に置き換える。特に、X軸は正負が逆のため、MINとMAXを入れ替えて大きい数字側をMINに入れて、小さい数字をMAX側にいれる。
//Param For 2.4"_9341_V3.0
#define TS_MINX 923
#define TS_MAXX 164
#define TS_MINY 176
#define TS_MAXY 947
これで位置ずれなく反応するようになった。
ということで、デモのスケッチをちゃんと動くように編集する方法でした。
コメント
コメントを投稿