道具さえあれば誰だって作れるブロック崩し解説
電子工作に自信がない方にも楽しめるように手順をまとめます。
準備するもの
-
Arduino UNO R4(Arduino UNO R3でもできるそうです)
-
AC-LLC8-V2 (8ビット双方向ロジックレベル変換モジュール)
-
MSP2807 (SPI TFT Module)
-
ブレッドボード
-
ジャンパー線
手順
1 配線する
いつも頼りにしているCADサービスに使用する機器のデータが入っていなかったため、drawioで泣く泣くがんばりました。(つらいのでマネしなくていいです)
この図で、
赤線:5V
黄線:3.3V
黒線:GND
その他の線はデジタルPINに接続させています。
今回の通信プロトコルはSPIで行っています。
Arduino標準のSPI接続ライブラリは以下の通りピンが決まっています。
UNO | PIN |
---|---|
11 | MOSI |
12 | MISO |
13 | SCK |
10 | SS |
今回は以下の通りに接続しました。
UNO | SCREEN | TOUCH |
---|---|---|
08 | T_CS | |
09 | DC | |
10 | CS | |
11 | SDI(MOSI) | T_DIN |
12 | SDI(MISO) | T_DO |
13 | SCK | T_CLK |
RESET, LEDはコントロールめんどくさいのでVCC(3.3V)に突っ込んでいます。
レベルシフタのB側は5V、Arduino側に接続。
A側は3.3V、MSP2807(タッチスクリーン)側に接続しています。
なんでかはわからないけどこれで動きます。(今後調べます)
2 ILI9341のライブラリに入っているデモを試す
今回ILI9341のライブラリを使用しています。
ライブラリをダウンロードすると、デモが入ってます。
File > Examples > Adafruit ILI9341 > graphctest
こちらを開くとデモのスケッチが開きます。
実行しようとするとエラーします。
R3までのバージョンのプログラムのままなので、R4では動作しないようです。
ライブラリの内容を書き換えると動きます。
書き換える場所は以下サイトから。
書き換えるプログラムは「Adafruit_ILI9341.cpp」。
なにかしらのテキストエディタで52-54行目を書き換え、上書き保存してください。
書き換え後デモ実行すれば、R4でも動作します。
3 プログラムをコピー、修正
実際にゲームのプログラムを動かしてみます。
コピーするスケッチは、いまいまさんから教わった以下サイトから(ありがとうBob氏!)
コピーしたスケッチから、TFT_RSTの個所(2か所)削除します。
なんたって、デジタルピンに落としていないのでエラーしますからね!
その後、defineで接続しているピンの番号を、組んだ回路に従って修正します。
わたしの組んだ内容だとこんな感じ。
あとはコンパイル(書き込み)すれば動作します!
備考
レベルシフター(8ビット双方向ロジックレベル変換モジュール)を使用する理由
うまく言語化できなかったのでチャットGPTに聞いてみました。
MSP2807をArduino Uno R4 WiFiにSPI接続する際に、8ビット双方向ロジックレベル変換モジュールを使用する理由は、信号レベルの違いを調整するためです。具体的には以下の点が考慮されます。
電圧の違い: Arduino Uno R4 WiFiは3.3Vのロジックレベルを使用し、MSP2807は5Vのロジックレベルを持っています。直接接続すると電圧の不整合が生じ、正常に通信できない可能性があります。ロジックレベル変換モジュールを使用することで、信号を適切に変換できます。
信号の方向: 8ビット双方向ロジックレベル変換モジュールは、双方向の信号変換をサポートします。SPI通信ではデータの送受信が行われるため、このモジュールを使用して信号の方向を適切に切り替えることができます。
信号の整合性: ロジックレベル変換モジュールは、信号の整合性を保つために設計されています。これにより、信号の遅延やノイズを最小限に抑え、信頼性のある通信を実現できます。
ざっくりですが今回はここまでで。
いつも疲れて雑な記事すみません(反省)