レトロでハードな物語

レトロなゲーム機・マイコン・中古デバイスなどをArduinoやAVRで再活用する方法を模索しています。

小型のジョイスティックを使ったカジェットを作りたい (その2)

2023年11月16日 | 電子工作

前回紹介したアナログジョイスティックを試したいので、Tinyjoypadのゲームを移植して遊んでみます。

まずはGR-COTTONとジョイスティックの接続です。配線は次のようにしました。

Tinyjoypadはこの他にボタンが一つ必要なのですが、その他にもう一つ追加しました。使用目的はまた後で説明します。

ボタン1 - 4ピン
ボタン2 - 3ピン

圧電スピーカも必要なので5ピンにつなぎました。

ディスプレイは前回使用した3種類それぞれをつないで動かしてみます。
Tinyjoypadは表示にI2C接続のSSD1306の独自ライブラリを使いますが、今回は使わず自作のルーチンで表示します。

それでは最初にTinyjoypadと同じI2C接続のSSD1306でゲームを動かしてみます。ディスプレイの配線は前回と同じです。
GR-COTTONに移植したのは世界的に有名なあのゲームをパクったこれです。

まずはソースリストをこちらからダウンロードします。Tiny Pacman attiny85の下にあるDownloadボタンを押します。
ダウンロードしたアーカイブを解凍したら、その中にあるspritebank.hと下記のtinypacmanI2C.inoをtinypacmanI2Cという名前のフォルダーを作って入れます。

tinypacmanI2C.ino

後はIDE for GRで読み込んでコンパイルとGR-COTTONへの書き込みを行います。

ゲームは特に問題なく動作しました。アナログジョイスティックはとても使い勝手がいいです。スムーズにキャラクターを動かせ、ストレスなくゲームを遊ぶことが出来ます。耐久性がどうなのかは今のところ不明ですが、今後もこのジョイスティックを色々な場面で使っていきたいですね。

スケッチですがオリジナルのソースをGR-COTTON向けに書き換えました。もともとのソースが見づらいものだっので分かりにくいとは思いますが、ジョイスティックとディスプレイ周りを変更してあります。さらにGR-COTTONの省電力機能を生かすために、追加した2つ目のボタンを押すとゲームを中断して省電力モードに移るようにしました。ジョイスティックを右方向に動かすと、中断した場面からゲームを再開することが出来ます。

ジョイスティックのアナログ値は0~1023まで変化しますが、0~99と924~1023の範囲でスティックを倒したと判定しています。この辺は好みもあるので必要に応じて値を変えるといいでしょう。スケッチの170行から記述しています。

サウンドはTinyjoypad独自のルーチンで鳴らされています。GR-COTTONで再生すると妙に間延びしたサウンドになってしまいましたので、発音時間を適当に短くしました。Tinyjoypadで使っているattiny85は内部クロック16MHz(PLL使用)で動作していると思うのですが、GR-COTTONは内部クロック32MHzで動いているはずです。サウンドだけでなくゲームも高速動作しているようには感じません。Tiny PacmanのYouTube動画を見ましたが、そちらの方が高速で動いているように見えます。attiny85侮れませんね。
でも、個人的にはちょうどいいゲームスピードだったので、これで良しとします。

次はSPI接続のSSD1306を使ってゲームを遊んでみます。ディスプレイの配線は前回と同じです。

手順は上記と一緒です。spritebank.hと下記のtinypacmanSPI.inoをtinypacmanSPIという名前のフォルダーに入れて、コンパイル&書き込みを行います。

tinypacmanSPI.ino

ゲームを動かすと、速い!
I2Cの時とはスピードが違います。相変わらずサウンドは間延びしていますが、ゲームキャラの動きが速すぎます。単純にディスプレイの接続方式の違いでしょうね。キャラクターは高速で動きますがぼやけることもなく、くっきりと表示されています。ゲーム用途にはSPIのOLEDディスプレイが良いですね。
ただ、個人的にこのスピードではゲームを楽しめないので197行目にウエイトを入れました。

スケッチですが、ディスプレイとの通信部分以外は上記と同じです。省電力機能も搭載しています。

続いてSPI接続のAQM1248Aでも試してみます。これも配線は前回と一緒です。このディスプレイはVRAMの容量はSSD1306の解像度128x64より大きいのですが、表示領域は128x48しかありません。Tinyjoypadのゲームを遊ぶにはキャラクターの動きに合わせてスクロールさせるなどの工夫が必要になります。ただ今回はお試しなので、単純に128x48の範囲だけを表示することにします。

OLEDと同様、spritebank.hと下記のtinypacmanLCD.inoをtinypacmanLCDという名前のフォルダーに入れて、コンパイル&書き込みを行います。

tinypacmanLCD.ino

これも動きが速い!SSD1306のSPIと同じような感じです。しかし、OLEDと比べてキャラクターが動くと少し残像が残って見づらくなります。やはりLCDはアクションゲームには向いていません。
これも190行にウエイトを入れました。

これで小型アナログジョイスティックを使ったガジェットのハードウェア構成が決まりました。ディスプレイはSSD1306のSPIにします。

次回は部品を基板に半田付けしたいと思います。Tinyjoypadのように小さくできないのは残念ですが、なんとか持ち歩けるサイズにはしたいところです。



最新の画像もっと見る

コメントを投稿