mbedでvstoneのコントローラVS-C3を使ってみました。その使い方をメモ。
このコントローラはPS2のコントローラ(DUALSHOCK2)と(信号の)互換性があるのでDUALSHOK2でも同様にmbedで扱えると思います。
利用するライブラリはSugaKoubouさんのPS_PADです。
https://developer.mbed.org/users/okini3939/code/PS_PAD/
サンプルプログラムはこちら。
https://developer.mbed.org/users/ds074704261/code/PSController_Sample/
接続方法はサンプルプログラムにコメントとして書いておきました。このエントリにも抜粋します。
/* * ====================== * VS-C3/VS-RCV3 PIN * ====================== * 1:NC 2:NC * 3:DAT 4:CMD * 5:SEL 6:CLK * 7:+5~7V 8:NC * 9:+3V 10:GND * */
この中で必要なのは
- DAT
- CMD
- SEL
- CLK
- +3V
- GND
以上6ピンです。
main.cppでは以下のようにして接続するピンを定義します。SPIを利用しているので、mbed(LPC1768/LPC1769)では利用できるピンはp5-p7またはp11-p13です。今回はp5-p7を利用しています。
PS_PAD vsc3(p5, p6, p7, p21);
PS_PAD.cppでは以下の順番で関数が定義されているので順番に気をつけてください。
PS_PAD::PS_PAD (PinName mosi, PinName miso, PinName sck, PinName cs) : _spi(mosi, miso, sck), _cs(cs) { _spi.format(8, 3); _spi.frequency(250000); _cs = 1; _vib1 = 0; _vib2 = 0; _connected = false; }
名称については以下の通りです。
信号名 | SPIの信号名 |
---|---|
DAT | MISO |
CMD | MOSI |
SEL | SS/CS |
CLK | SCK |
あとはサンプルの通り、vsc3.poll();
したあと、
vsc3.read(PS_PAD::PAD_CIRCLE)
などでボタンの状態を取得できます。
ボタンは以下の通りです。
- PAD_LEFT
- PAD_BOTTOM
- PAD_RIGHT
- PAD_TOP
- PAD_START
- ANALOG_LEFT
- ANALOG_RIGHT
- PAD_SELECT
- PAD_SQUARE
- PAD_X
- PAD_CIRCLE
- PAD_TRIANGLE
- PAD_R1
- PAD_L1
- PAD_R2
- PAD_L2
アナログスティックの状態は以下の4つに分けられますが、PS_PAD.cppの中で現在値-0x80して128引かれているので注意が必要です。
- ANALOG_RX
- ANALOG_RY
- ANALOG_LX
- ANALOG_LY
ループのなかにwait()を入れるのを忘れないように注意してください。サンプルでは0.05sec確保しています。
ただ単に動かすだけならばインポートし、編集するだけで十分だとは思いますが、詳しく理解するためには以下のサイトが便利です。
プレイステーション用コントローラDUALSHOCK2でロボを動かす
http://homepage3.nifty.com/nisokuda-yahhoi/dualshock2.htm
【【【【【 デュアルショック2(SCPH-10010)の新機能使用方法 】】】】】
http://applause.elfmimi.jp/dualshock/millar/NT/dualshock_2.txt
【【【【【 デュアルショック(SCPH-1200)の解析 】】】】】
https://applause.elfmimi.jp/dualshock.txt
プレイステーション・PAD/メモリ・インターフェースの解析
http://kaele.com/~kashima/games/ps_jpn.txt
電子工作:DualShock2(PS2コントローラ)の信号解析サイトとコントローラ考察 | Scratchpad
http://www.usagi1975.com/20140731610/
ちなみにAVRで扱う場合はこちらのページが参考になるかと思います。
AVRでPS2コントローラーを使ってみた – 夕天の技術書
http://sekiten42.hatenablog.com/entry/2015/01/05/225304
コメント
コメント一覧 (9件)
大阪工業大学ロボットプロジェクトの河合です。
mbed Nucleoでdualshock2を使おうと思い、ライブラリをいれてサンプルプログラムを参考にして、プログラムを書いたのですがうまくいきません。
メインプログラムを添付しておくので、改善点があれば教えてください。
すみません
添付できなかったのでメールを送ってもらえれば返信で添付します。
河合さん
コメントありがとうございます。
こちらにプログラムを保存してURLを貼っていただけますでしょうか?
ttps://gist.github.com/
これです。
https://gist.github.com/anonymous/79d17f2ee7119a2581095da11c352a90
ライブラリに関しては、いじっていません。
河合さん
プログラム、拝見しました。
プログラム自体には問題ないと思います。
あとはあるとしたら接続ピンの問題だと思います。使っているマイコンボードの正式な型番はわかりますか?
Nucleo F401REを使っています。
河合さん
私もF401REとLPC1769で試してみました。
同じプログラムを利用しました(ピン番号のみ変更)。
結果、LPC1769では問題ありませんでしたが、F401REではSPI通信がうまくいきませんでした。
インクルードしているmbed.hにバグがある状態だと思われます。
F401REのSPIには問題があることが報告されていましたので、そのうち修正されるとは思います。ですが、早めにDUALSHOCK2を使用したい場合には使うマイコンボードを変更されるのがよいかと思います。
お役に立てず申し訳ないです。
自分一人では、どうにもならなかったので助かりました。
ありがとうございます。