TFT 液晶ディスプレイ + タッチスクリーン + microSD のコンボシールドで、5V / 3.3V での駆動及び LEONARDO での動作が可能です。タッチペンもオマケで付いてきます。
Amazon で購入できます (購入時価格: ¥1,430)。この製品は adafruit 2.8" TFT Touch Shield for Arduino のコピー品だと思われます。
パッケージには、
|
とあります。日本語訳すると、
|
といった所でしょうか。
信号 | UNO | 説明 |
LCD_D0 | 8 | LCD 8 ビットデータ Bit0 |
LCD_D1 | 9 | LCD 8 ビットデータ Bit1 |
SD_SS | 10 | SD カード SPI バス チップ選択信号 |
SD_DI | 11 | SD カード SPI バス MOSI 信号 |
SD_DO | 12 | SD カード SPI バス MISO 信号 |
SD_SCK | 13 | SD カード SPI バス クロック信号 |
GND | (NC) | |
AREF | (NC) |
信号 | UNO | 説明 |
0 | (NC) | |
1 | (NC) | |
LCD_D2 | 2 | LCD 8 ビットデータ Bit2 |
LCD_D3 | 3 | LCD 8 ビットデータ Bit3 |
LCD_D4 | 4 | LCD 8 ビットデータ Bit4 |
LCD_D5 | 5 | LCD 8 ビットデータ Bit5 |
LCD_D6 | 6 | LCD 8 ビットデータ Bit6 |
LCD_D7 | 7 | LCD 8 ビットデータ Bit7 |
信号 | UNO | 説明 |
A5 | (NC) | |
LCD_RST | A4 | LCD バス リセット信号 |
LCD_CS | A3 | LCD バス チップ選択信号 |
LCD_RS | A2 | LCD バス コマンド/データ選択信号 |
LCD_WR | A1 | LCD バス 書き込み信号 |
LCD_RD | A0 | LCD バス 読み出し信号 |
信号 | UNO | 説明 |
VIN | (NC) | |
GND | GND | GND |
GND | (NC) | |
5V | 5V | 5V |
3V3 | (NC) | |
RESET | (NC) |
以下の記事で使われている TFT 液晶と全く同じと思われます。
この記事の著者は、記事中で実行しているサンプルのソースコードをファイルとして提供しておらず、「動画に流れるソースコードを参考に写経しろ」 というマゾヒストです (写経した人のソースコードはこちら)。
Amazon で出品者に「サンプルください!」と連絡すると MEGA 経由でサンプルを含むドキュメントファイルが貰えます。で、この中にも改変された Adafruit_TFTLCD.cpp があるのですが、資料を読んでびっくり。この製品の TFT コントローラは ILI9341 ではなく LGDP4535 なんだだそうです。パッケージやファイル名に ILI9341 とあるのは何だったのか。
このシールドを使うのに必要なライブラリは以下の3つです。Arduino IDE の libraries フォルダにコピーしてください (zip で取得したのであれば [スケッチ | ライブラリをインクルード | .zip 形式のライブラリをインストール...] からでも OK)。
最初のサンプルスケッチとしては、TFT ライブラリに含まれる graphicstest.pde がいいでしょう。しかしながらこのシールド、そのままサンプルスケッチを動作させても画面が真っ白になってしまうのです。
これは tft.readID() を実行すると ID として 0x0101 が返ってくるのですが、ライブラリがこの ID に対応していないからで、とりあえずの対策は Adafruit_TFTLCD.cpp の一部を書き換える事です。
|
このようになっている所を
|
こう書き換えるだけです。これだけですべてのサンプルスケッチが正しく動作するようになります。
サンプルスケッチを元に microSD カードから BMP 画像を読み込ませてみました。撮影技術がアレなのでイマイチな写りですが、実際にはそこそこキレイに表示されています。
このシールドでタッチパネルを使う場合には補正が必要です。ディスプレイの表示領域でのタッチパネルの最小値と最大値を確認してキャリブレーションを行う必要があります。
|
タッチした位置の情報がシリアルモニタに表示されます。(X, Y) の後に表示されている X= / Y= が抵抗膜の X / Y 値です。液晶の白く表示されている部分で X / Y それぞれの最小値と最大値を控えておき、ソースコードの TS_MINX / TS_MINY / TS_MAXX / TS_MAXY の値を書き換えます。再コンパイルして実行すると (X, Y) が TFT 液晶の座標に一致するようになります。
UNO とかだと目的のアプリケーションに (3DS にあるような) キャリブレーション機能を持たせる余裕はないと思うので、補正値をマジックナンバーで書き込むか、microSD 等から設定値を読み込むしかないかもしれません。
See Also:ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。