Arduino UNO R4にTFT Touch Shieldをつなぐ
前回のwaveshare製1.5inch OLEDモジュールに続き、SeeedStudio製2.8inch TFT Touch Shield v2.0をArduino UNO R4につないでみました。
2.8インチのTFTディスプレイとタッチパネル、SDカードのインタフェースが搭載されたArduino用の拡張シールドです。かなり以前に購入した物(10年くらい前になるかも)です。
以前からあるArduinoであれば、次のように公開されているライブラリを使えば問題なく動作します。
ArduinoIDEで、メニューの「ツール」ー「ライブラリを管理」でライブラリマネージャを開き、「TFT Touch Shield v2.0」をインストールします。
インストールが完了すると、メニューの「ファイル」ー「スケッチ例」にサンプルスケッチが出てくるので、適当に選んでコンパイルして書き込めば動くと思います。手持ちのArduino Leonardoでは動作の確認ができています。
しかし、現在公開されているTFT Touch Shield v2.0のライブラリは、Arduino UNO R4には対応していないため、このままでは動作しませんでした。
Arduino UNO R4でも動くように修正したライブラリを置いておきます。UNO R4専用というわけではなく、オリジナルで動いていたものは、そのまま動くと思います。
Arduino IDEのメニュー「スケッチ」ー「ライブラリをインクルード」ー「.ZIP形式のライブラリをインストール」を選び、ダウンロードしたzipファイルを選べばインストールされます。ライブラリマネージャを使ったオリジナルのライブラリのインストールは必要ありません。
ライブラリは$HOME/Arduino/libraries/TFT_Touch_Shield_v2.0kというディレクトリにインストールされます。インストールしたライブラリを削除したい場合は、このディレクトリを丸ごと削除すれば良いです。
Arduino UNO R4でコンパイルする場合は、コンパイルオプションに-fpermissiveを付ける必要があります。その方法(platform.txtを修正する方法)はOLEDディスプレイのときの説明を参考にしてください。
Arduino UNO R4 WiFiにこのシールドを取り付ける場合には注意する点があります(Minimaでは問題ありません)。R4 Wifiでは、シールドに付いているスイッチと、ArduinoのVRTC & OFF Pinsとが接触してしまうと、書き込み時のUSBがデバイスが認識しなくなってしまいます。なので、ややシールドを浮かせて装着する必要があります。
ライブラリをインストールしたら、試しにメニューの「ファイル」ー「スケッチ例」ー「TFT_Touch_Shield_v2.0k」の中のサンプルを開いて、コンパイル、書き込みをしてみてください。
例えば、paintはタッチパネルでの手書き入力のサンプルです。
tftbmpはSDカード内のbmpファイルを表示するサンプルです。SDライブラリが必要なので、あらかじめライブラリマネージャでSDライブラリをインストールしてください。
tftbmp_sdfatは、tftbmpをSdFatライブラリを使うように改修したものです。サンプルスケッチに追加しました。SdFatライブラリが必要なので、あらかじめライブラリマネージャでSdFatライブラリをインストールしてください。オリジナルのtftbmpより読み込み速度が早くなると思います。
今回修正したライブラリですが、アルゴリズム的な修正は特に行っていません。主にコンパイルが通るように修正したのと、コンパイル時にArduino UNO R4の正しい入出力ピン番号になるようにしました。
修正したソースはTFTv2.h, TFTv2.cpp, SeeedTouchScreen.cpp, touchScreen.inoです。
また、サンプルスケッチとしてtftbmp_sdfatを追加しました。
Arduino UNO R4のコンパイルでは、ARDUINO_ARCH_RENESAS, ARDUINO_ARCH_RENESAS_UNOがマクロ定義(define)されているので、UNO R4固有の箇所はこれらの値でコンパイルスイッチさせています。
UNO R4ではADCがこれまでの10bitから14bitに変わったので、タッチパネルの読み取り値も異なるのかと思いましたが、互換性のためデフォルトでは10bitになっているので、修正は必要ありませんでした。
タッチパネルの読み取り原理に関しては下記のページでわかりやすく解説されています。
この記事が気に入ったらサポートをしてみませんか?