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
関連記事
- (Updated )uVision4でbinにチェックサムを付与する方法uVision4でbinにチェックサムを付与する方法をメモ。
- (Updated )WindowsにGeanyをインストールする方法(詳細版)WinodwsにGeanyをインストールする方法(詳細版)をメモしておきます。
- (Updated )Xcodeでmbedのプロジェクトをビルドする方法Xcodeでmbedのプロジェクトをオフラインビルドする方法のメモ。
- (Updated )モータドライバ[TA7291P]DCモータドライバ[TA7291P]を扱う方法を軽くまとめておきます。
- TurtleBot3 + Gazebo + Navigation2 (ROS 2 Jazzy)ROS 2 JazzyでGazebo(旧Ignition)上のTurtleBot3をNavigation2(Nav2)を動かすまで+その過程で調べたことのメモです。
