Arduino Pro Micro の勉強も兼ねまして、セガサターンのバーチャスティックを USB HID 化して PC に接続できるようにしてみました。
使いました Arduino Pro Micro 互換機はこちらです。
KEYESTUDIO Pro Micro Atmega32U4 5V、ピンヘッダーを交換Pro Micro for Arduino
この機械は SparkFun 社が設計した本家の Arduino には存在しないラインナップで、KeyeStudio のはさらにその互換機になります。 1000円くらいなり。
ということで、まずは Arduino のボードマネージャーに以下の URL を指定して、SpackFun Pro Micro をボードに追加します。
https://raw.githubusercontent.com/sparkfun/Arduino_Boards/master/IDE_Board_Manager/package_sparkfun_index.json
ボードを追加したら書き込み対象の Arduino に、 SpackFun Pro Micro の 5V/16MHz を指定します。 vscode-arduino を使っている場合は、arduino board configuration が次のようになります。
デフォルトが 3.3V/8Mhz になるようですので要注意です。 この指定でもすんなり書き込めてしまうようですが、どんなプログラムを実行しても不明な USB デバイスになってしまう悲しい機械になってしまいます。(ちょっとはまりました…
また、Pro Micro に USB HID になるプログラムを書き込み、実行が始まると USB HID と COM ポートが OS に認識されますが、この際に COM ポートが書き込み時のものと異なるポートに配置され、次回のプログラム書き込みができなくなるケースがあるようです。 Windows であればデバイスマネージャから、どのように認識されたかを確認して、書き込みできない場合は COM ポートの設定を合わせてみてください。
特殊な操作として、起動中の Pro Micro の RST 端子を GND にちょいちょいと 2回落とすとリセットがかかり初期状態の COM ポートが 8秒間だけ現れる機能があります。
8MHz で設定してしまったなど、どうしても書き込みができなくなった場合は、コンパイルから書き込みに入ったあたりでリセットをかけ、出現した COM ポートめがけて Lチカなどを転送すると元に戻ってほっとします。 😀
てなわけで若干癖があるボードですが、無事セガサターンのバーチャスティックを USB 化することができました。
結線やソースコードは github に公開してみました。
Convert Sega Saturn controller to USB HID joypad using Arduino Leonardo / Pro Micro.
ジョイスティックデバイスとして認識したら、Windows では次の画面で動作確認をすることができます。
ボタンキーアサインは手持ちしていました HORI のファイティングスティックmini を真似てつくってみました。
ソースコードの次の部分でボタン番号を指定できますので、好みに変えてみてください。 0,1,2… が画面上 1,2,3… ボタン相当です。(9は存在しないボタン)
uint8_t buttonMap[3][4] = { { 4, 9, 9, 9 }, // L - - - { 6, 0, 3, 5 }, // R X Y Z { 8, 1, 7, 2 } // S A C B };
なるべく入力断面を合わせたり、遅延しないようにつくったつもりですが果たして…
違和感なく動作しているようなので、ザック島に急ぎます。3D プリンターでケースをつくろう。 🙂