メガドラミニにプレステアケコンをつなぐアダプタを作ったよ
メガドラミニは大変すばらしいがアーケードコントローラが使えないのが玉にキズ。
コントローラの差込口はUSBだけど、付属パッドやバッファロー製など一部の対応コントローラ以外は、つないでも動かない。
そんなときこそArduino電子工作!
Pro Micro に対応コントローラのidを設定してやることで、いつものPS1用アケコンをメガドラミニに接続するアダプタができました。
ただし、通常のJoystickライブラリではコントローラのボタンが効かないので注意。
Oh!石さんによるメガドラミニ対応の改造Joystickライブラリを使うとうまくいきます。
シューティングはもとより、テトリスもアケコンの方が遊びやすいような気がする。(人によりけり)
自作キー配列をiPadで使いたいのだ
iPadのカバー型キーボードが大変気にいったワケですが、残念なことにiPad環境ではキー配列のカスタマイズができない。
親指シフトとかAZIKとか、M配列とか花配列とか、世の中いろいろ便利な配列があるんだけどそういうのはiPadでは使えない。
かくいうワタシも、病気でじゃっかん指にマヒがあり、小指と薬指が使いにくいのでオレ配列「ベム配列」を考案して、いつのまにか15年も使っています。
詳細は省きますが(そういえばどこにも詳細を書いてない!)、このベム配列を当然iPadでも使いたい。
Google日本語入力は出てないのか?ATOKにローマ字カスタマイズはないのか?自作テキストエディタでキー変換すればいいのか?
いろいろ調べていると、PCやタブレットとUSBキーボードの間に入れて好きなキー配列に変換する「かえうち」という製品を見つけました。
なるほどこの手があったか!すばらしい!
でもおれはこのUltra thinをベム配列化したいワケで、このかえうちはちょっと違う。残念!
だが待てよ?かえうちがUSBでやってることを、Bluetoothでやる装置を作ればいいんでないかい?
つまりその装置は、iPadからはBTキーボードに見えて、UltrathinからはiPadに見える。
Arduinoとか、ESP32で作れるかな?そういう装置ほしい人いる?
ESP32でPSコントローラーを読むには
ESP32-devkitcというマイコン開発ボードでプレステのコントローラをファミコンで使うアダプタを作って遊んでいた。
弾を撃つと不意にポーズがかかったりして、出来はいまいちなんだが、開発メモを書いておく。
利用できるライブラリ
ぐぐるといくつか出てくる。
これはPSコントローラを認識できなかった。
そのまま使うと動かない。
ライブラリのソースコードGPSX.cの、GPIOピン番号を適切に変更する。
#define DAT_PIN 27 // CTL1 Data #define CMD_PIN 13 // CTL2 Command #define AT1_PIN 26 // CTL6 Attention (PAD1) #define CLK_PIN 14 // CTL7 Clock
ここでは左の番号がESP32のGPIO、右のCTLxがPSコントローラのピン番号。
どのGPIOピンでも動くが、17〜22ピンは使ってはいけない。(内部で使っている)
また、12ピンはDATピンにはできない。DATにはプルアップ(PSピンとESP32ピンの間に10kΩの抵抗を入れ、Vcc(5V)につなぐ)が必要だが、ESP32は12ピンをプルアップするとBASICが起動してしまう!
digitalWriteを開く
digitalWriteは遅いのでポートレジスタを直接叩いてやる高速化メソッドがある。
これをESP32でやる場合、単純にポートレジスタのアドレスにand,orしてもうまくいかなかった。
fにはHIGH/LOWにあたる1/0が入るとして、
// digitalWrite(PIN_OUT, f); // 相当のコード if (f) { GPIO.out_w1ts |= ((uint32_t)1<<PIN_OUT); } else { GPIO.out_w1tc |= ((uint32_t)1<<PIN_OUT); }
IO32〜39ピンなら以下のようになる。
// digitalWrite(pin, f); // 相当のコード(PIN=32..39) if (f) { GPIO.out1_w1ts.val = ((uint32_t)1<<(pin - 32)); } else { GPIO.out1_w1tc.val = ((uint32_t)1<<(pin - 32)); }
esp32-hal-gpio.cの_digitalWriteに全部書いてある。
ファミコンコントローラ信号
GitHub - GOROman/NESBot-mini
ファミコンのコントローラー信号をソフトウェアで作るサンプルを見たのでESP32を使ってみたが、よくよく見るとここではVSyncのタイミングを得るためファミコンのCPUからNMIを取り出している。
PS,CLKピンの割り込みだけでもそこそこ動いたが、先に述べたようにゲームにならない。
結局本物のコントローラーと同じ4021のロジックで信号作るのだったら、PSコンの読み取りはArduinoで済んじゃう。
とするとESP32を用意した意味あんまりなかったが…まあここまで遊べたので良い。
また何かの役に立つ日も来るかも。
■
おー二年超放置してしまった。生きてます。あんまり特撮見てません。
昔のマイクロソフトのゲームポートジョイスティックを復活させるためのメモ
ハードオフでマイクロソフトのサイドワインダー・プレシジョン・プロのジャンク品を500円でゲットした。
箱にはゲームポートおよびUSBポート対応と書いてあったが、残念ながらUSBアダプタは欠品。
Arduinoでゲームポートを読みだして何とかできないか調べてみると、Teensyやダビンチといったマイコン(Atmega32U4)による作例はあるがArduinoの例が見あたらない。
http://www003.upp.so-net.ne.jp/BackyWorks/SWFFBP.html
だが、さらに調べてみるとマイコンを使うまでもないことがわかった。
http://www.descentbb.net/viewtopic.php?t=14791
プレシジョンプロは、USBの1〜4番ピンをゲームポートの1, 14, 10, 4につなぎ、ゲームポートの2番と7番をショートさせると、USBジョイスティックとして動作するのだ。
デバイスドライバはWindows 7に内蔵されていて、接続即認識である。
USB | ゲームポート |
---|---|
1(赤) Vcc | 1 |
2(白) D- | 14 |
3(緑) D+ | 10 |
4(黒) GND | 4 |
2-7 |
で、これをプレイステーション3に接続したら、PS2アーカイブのギャラクシーフォースが動いた! これはすばらしい!
……と思ったのもつかの間、STARTボタンが効かない。
ゲームスタートのたびに純正コントローラに切り替えるのが癪だ。
シフトボタン(9番ボタン)がセレクトボタンとして使えたので、10番ボタンがあればスタートボタンとして働くはずだ。ボタンなんか余ってるんだ!
そこで、Arduinoを使って余ってるボタンにスタートボタンを割り当てることはできないかと考えた。
ArduinoにUSBホストシールド2.0をつないでジョイスティックサンプルプログラムを動かしてみると、プレシジョンプロの出す信号がなかなか風変わりなのがわかった。
プレシジョン | USBジョイスティック | 備考 |
---|---|---|
X軸 | y1軸 | 0〜255 |
Y軸 | x2軸 | 0〜255 |
Z軸(ラダー) | y2軸 | 0〜255 |
レバー上ボタン | x1軸 | トリガー(10H), 左ボタン(20H) 右上(40H) 右下(80H) |
台座上ボタン | Rz軸 | A(04H), B(08H), C(10H), D(20H), シフト(40H) |
ハットスイッチ | x1軸 | 上から時計回りで0〜7, ニュートラル時8 |
スロットル | ハットスイッチ | 0〜15 |
Windowsはともかく、こんな信号をPS3がしっかり認識するのにびっくりした。ギャラクシーフォースが偉いのか?
変換プログラムはこれから作る。
■
どっこい生きてるシャツの中(それは違うカエル)