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

これで位置ずれなく反応するようになった。

ということで、デモのスケッチをちゃんと動くように編集する方法でした。







コメント

このブログの人気の投稿

Attiny85とAQM0802A(LCD)のI2C接続

Attiny85 FuseRest