mbedでVS-C3を使ってみた

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を利用しています。

mbed_pin

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確保しています。

VS-C3

V-controller3取扱説明書

ただ単に動かすだけならばインポートし、編集するだけで十分だとは思いますが、詳しく理解するためには以下のサイトが便利です。

プレイステーション用コントローラ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

この記事が気に入ったら
フォローしてね!

よかったらシェアしていただけると励みになります!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Memotekiの管理人です。このブログには学んだことや共有しておきたいことをマイペースにメモしていきます。2020年からは日記も書き始めました。

コメント

コメント一覧 (9件)

  • 大阪工業大学ロボットプロジェクトの河合です。
    mbed Nucleoでdualshock2を使おうと思い、ライブラリをいれてサンプルプログラムを参考にして、プログラムを書いたのですがうまくいきません。
    メインプログラムを添付しておくので、改善点があれば教えてください。

  • すみません
    添付できなかったのでメールを送ってもらえれば返信で添付します。

    • 河合さん

      コメントありがとうございます。
      こちらにプログラムを保存してURLを貼っていただけますでしょうか?
      ttps://gist.github.com/

    • 河合さん

      プログラム、拝見しました。
      プログラム自体には問題ないと思います。
      あとはあるとしたら接続ピンの問題だと思います。使っているマイコンボードの正式な型番はわかりますか?

    • 河合さん

      私もF401REとLPC1769で試してみました。
      同じプログラムを利用しました(ピン番号のみ変更)。
      結果、LPC1769では問題ありませんでしたが、F401REではSPI通信がうまくいきませんでした。
      インクルードしているmbed.hにバグがある状態だと思われます。
      F401REのSPIには問題があることが報告されていましたので、そのうち修正されるとは思います。ですが、早めにDUALSHOCK2を使用したい場合には使うマイコンボードを変更されるのがよいかと思います。
      お役に立てず申し訳ないです。

  • 自分一人では、どうにもならなかったので助かりました。
    ありがとうございます。

コメントする


The reCAPTCHA verification period has expired. Please reload the page.

目次