レトロでハードな物語

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

ブロック崩しで遊ぶためのコントローラーを作る 2

2021年03月31日 | 電子工作

前回のテストでマウスホイールのロータリーエンコーダの操作性が割と良かったので、これをパドルコントローラに仕上げたいと思います。

目的のLBreakout2はマウスで操作するので、パドルコントローラ風のマウスを作ることにしました。色々考えましたが、最終的にこうなりました。



ホイール2つとスイッチ3つのデバイスです。左のホイールでマウスのY軸の操作を行い、右のホイールがX軸の操作になります。タクトスイッチはマウスの左・中・右ボタンになります。利用した古いマウスのホイールの形状とロータリーエンコーダの大きさが異なっていたので、2つのホイールの位置とサイズがちぐはぐで不格好になってしまいましたが、操作には問題なかったのでそのまま利用しました。ただ、ホイールの軸が貧弱なのでゲーム中に力を入れて折ってしまわないように、ダイソーのPPシートを加工して補強しました。また、基板をしっかり支えるように、PPシートを加工した台を下に入れるようにしました。





滑り止めに台の下にダイソーの耐震マットを敷いたら、机にしっかり固定することが出来ました。

ところで前回はホイールにつながっているロータリーエンコーダの回転を計測するのに、外部割り込みを2つ使っていましたが、今回はロータリーエンコーダが2つあるので外部割り込みが3つしかないPro Microではこの方法は利用できません。
そこで、タイマ割り込みを使って定期的に2つのロータリーエンコーダの状態を読み取ることにしました。割り込み間隔は1msです。10msや5msで試したら、ロータリーエンコーダを高速に回した時にスイッチのオンオフ状態の取りこぼしが発生したので、取りこぼしがなかったこの間隔にしました。

タイマ割り込みを使用したスケッチはこちらになります。

ProMicroRotaryEncoderTimer1Mouse.ino


今回使ったPro Micro(互換機5V16MHz)で使用されているATmega32U4では、Timer0がArduinoのシステムで使用されているので16ビットタイマのTimer1を使用しています。
このスケッチではホイールの回転数を10倍したものをマウスの移動量としていますが、これは対象のゲームによっても異なりますし、ゲーム側でも移動量の設定が出来るので利用しながら最適な値を決めていくことになるでしょう。

USBマウスとして作ったので、このままでも(ホイールが無い!?)普通のマウスとして使用できます。2つのダイアルでお絵描きする玩具がありますが、あんな感じでマウスカーソルが動かせます。使い勝手はともかく、ちょっとおもしろいポインティングデバイスになりました。



それでは早速LBreakout2で遊んでみます。



このゲームなかなか難しくて(ただ下手なだけかも)マウスで遊んでいたときはゲームレベルをEasyにしても1面クリアすらままならなかったのですが、このパドルコントローラ風のデバイスを使うと画面のバーを狙った位置に止めやすくなり、コンティニューなしで2、3面くらいならクリア出来るようになりました。画面上のバーがコントロールしやすくなったのもありますが、ボールが予想外の反射で戻ってきたときに、ホイールを弾くように回してバーを高速移動させて打ち返せるのが良かったみたいです。

このデバイスで操作性が良くなったので、ブロック崩しゲームを集中して長時間遊んでしまいました。こんなにブロック崩しを遊んだのはゲームセンターのアルカノイド以来ですかね。
ただホイールがちょっと小さいのか、しばらく遊んでいると指が疲れてきます。ひと工夫してホイール部分をもう少し大きくしたほうがもっと楽に扱えたかもしれません。まあ、長時間遊び続けるのを抑止するという意味ではこのほうが良いのかもしれませんけど。



最新の画像もっと見る

コメントを投稿