PS2コントローラを手軽に使えるArduino Shieldを動かしてみた。操作性が良いプレステ2のコントローラを使って、ロボットを制御できるようになります。
[itemlink post_id=”245″]
Cytron社が出している専用ライブラリがGithubで公開されているのでダウンロードします。
https://github.com/CytronTechnologies/Cytron_PS2Shield
ArduinoIDEを開いて、上のバーの”スケッチ”→”ライブラリをインクルード”→”Zip形式のライブラリをインストール…”を押して先ほどダウンロードしたファイルを選択します。
今回使ったのはシールド版なので差し込むだけで接続は完了です。
// readButton関数 name.readButton(引数); // "name"は、宣言時の任意の文字列 // 戻り値は、unsigned char型
この関数に調べたいボタンの引数を代入することで、ボタンが押されているか押されていないか判定できます。
先ほどと同じreadButton関数に、調べたいスティックの軸の引数を代入することで、現在のスティックの座標を調べることができます。
// vibrate関数 name.vibrate(motor,value); // "name"は、宣言時の任意の文字列 // 戻り値なし
関数に、下の表の引数を代入すると、コントローラのモーターを動かすことができます。
引数 | motor | value |
---|---|---|
Bigmotor | 0 | 0~255 |
Smallmotor | 1 | 0 or 1 |
簡単に動作テストのコードを書いてみました。
左スティックのx座標とy座標の値がシリアルモニタに表示されます。またセレクトボタンを押すとArduino Uno上のLEDが点灯します。
#include <Cytron_PS2Shield.h> #include <SoftwareSerial.h> Cytron_PS2Shield ps2(2,3); /* 初期設定 */ void setup() { ps2.begin(9600); Serial.begin(9600); pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, LOW); } /* メイン */ void loop() { //check select_button if(ps2.readButton(PS2_SELECT)==0){ digitalWrite(LED_BUILTIN,HIGH); } else{ digitalWrite(LED_BUILTIN,LOW); } //check LEFT_X_joystick Serial.print("X Axis val:"); Serial.print(ps2.readButton(PS2_JOYSTICK_LEFT_X_AXIS)); Serial.print(" "); Serial.print("Y Axis val:"); Serial.println(ps2.readButton(PS2_JOYSTICK_LEFT_Y_AXIS)); delay(50); }
ボタンもスティックも正常に動作しました。
シリアルモニタでジョイスティックの値を確認すると、x座標y座標共に0~255の間で値が返ってくることが分かりました。触っていないときは中央値である128が返ってきます。以下の画像はデーシートから引用した画像です。
接続から動作までArduinoなら簡単にできました。Robo-Oneなどのロボットを動かすときに役立ちそうですね。
[itemlink post_id=”245″]