PS4 controller with IM315

Dependents:  

Committer:
m2130
Date:
Sat Aug 06 07:19:29 2022 +0000
Revision:
0:9577e971f55b
Child:
1:090d61e465d7
PS4 controller with IM315

Who changed what in which revision?

UserRevisionLine numberNew contents of line
m2130 0:9577e971f55b 1 #ifndef IM315PS4_H
m2130 0:9577e971f55b 2 #define IM315PS4_H
m2130 0:9577e971f55b 3 #include "mbed.h"
m2130 0:9577e971f55b 4
m2130 0:9577e971f55b 5 //DATA[1]
m2130 0:9577e971f55b 6 #define TRI 0x01
m2130 0:9577e971f55b 7 #define CIRCLE 0x02
m2130 0:9577e971f55b 8 #define SQUARE 0x04
m2130 0:9577e971f55b 9 #define CROSS 0x08
m2130 0:9577e971f55b 10 #define TOUCHPAD 0x10
m2130 0:9577e971f55b 11 #define PS 0x20
m2130 0:9577e971f55b 12 #define L1 0x40
m2130 0:9577e971f55b 13 #define R1 0x80
m2130 0:9577e971f55b 14
m2130 0:9577e971f55b 15 //DATA[2]
m2130 0:9577e971f55b 16 #define UP 0x01
m2130 0:9577e971f55b 17 #define RIGHT 0x02
m2130 0:9577e971f55b 18 #define LEFT 0x04
m2130 0:9577e971f55b 19 #define DOWN 0x08
m2130 0:9577e971f55b 20 #define OPTION 0x10
m2130 0:9577e971f55b 21 #define SHARE 0x20
m2130 0:9577e971f55b 22 #define L3 0x40
m2130 0:9577e971f55b 23 #define R3 0x80
m2130 0:9577e971f55b 24
m2130 0:9577e971f55b 25 /*IM315を用いてPS4コントローラ(DS2)を使う *受信
m2130 0:9577e971f55b 26 例 F446RE用IM315接続基盤の場合
m2130 0:9577e971f55b 27 IM315PS4 ds4(A0, A1); マイコン ~ PC間のボーレート指定なし(9600)
m2130 0:9577e971f55b 28 IM315PS4 ds4(A0, A1, 115200); マイコン ~ PC間のボーレート指定あり
m2130 0:9577e971f55b 29
m2130 0:9577e971f55b 30
m2130 0:9577e971f55b 31 DS4はArduino Nano用読み取り基盤を用いてボタンの状態を読み取り下記のような8バイトの文字列データ(16進数表記)にして送信してください
m2130 0:9577e971f55b 32 /--------------------------------------------
m2130 0:9577e971f55b 33 DATA[0] 上の表に対応するように
m2130 0:9577e971f55b 34 DATA[1] 上の表に対応するように
m2130 0:9577e971f55b 35 DATA[2] 0x00 ~ 0xff
m2130 0:9577e971f55b 36 DATA[3] 0x00 ~ 0xff
m2130 0:9577e971f55b 37 DATA[4] ~ DATA[7] 左右スティックのアナログ値 4 -> LスティックのX値 5 -> LスティックのY値 6, 7 -> Rスティックで同様
m2130 0:9577e971f55b 38
m2130 0:9577e971f55b 39 例 01040000ff000000 △ボタンと十字左ボタンが押され、Lスティックを最大まで右に倒した場合
m2130 0:9577e971f55b 40 /--------------------------------------------
m2130 0:9577e971f55b 41
m2130 0:9577e971f55b 42
m2130 0:9577e971f55b 43 /---------- sbdbtライブラリとの相違点 ----------
m2130 0:9577e971f55b 44 ・ニュートラル関数がない
m2130 0:9577e971f55b 45 ・L2 R2ボタンがアナログでのみ使用可能
m2130 0:9577e971f55b 46 ・L3 R3ボタン(スティック押し込み)が使用可能
m2130 0:9577e971f55b 47 ・PSボタン タッチパッドが使用可能
m2130 0:9577e971f55b 48 ・スティックの入力範囲が 0 ~ 255 となっている
m2130 0:9577e971f55b 49 ・スティックの初期値(ニュートラル値)は 0x7f(127)
m2130 0:9577e971f55b 50 /--------------------------------------------
m2130 0:9577e971f55b 51
m2130 0:9577e971f55b 52 */
m2130 0:9577e971f55b 53
m2130 0:9577e971f55b 54 class IM315PS4{
m2130 0:9577e971f55b 55 public:
m2130 0:9577e971f55b 56 IM315PS4(PinName TX, PinName RX); //マイコン ~ PC間のボーレート指定なし(9600)
m2130 0:9577e971f55b 57 IM315PS4(PinName TX, PinName RX, int baud); //マイコン ~ PC間のボーレート指定あり
m2130 0:9577e971f55b 58 void button_state(); //全ボタン, スティックの状態表示
m2130 0:9577e971f55b 59 void data_print();
m2130 0:9577e971f55b 60 bool up();
m2130 0:9577e971f55b 61 bool right();
m2130 0:9577e971f55b 62 bool left();
m2130 0:9577e971f55b 63 bool down();
m2130 0:9577e971f55b 64 bool tri();
m2130 0:9577e971f55b 65 bool circle();
m2130 0:9577e971f55b 66 bool square();
m2130 0:9577e971f55b 67 bool cross();
m2130 0:9577e971f55b 68 bool l1();
m2130 0:9577e971f55b 69 bool r1();
m2130 0:9577e971f55b 70 bool l3();
m2130 0:9577e971f55b 71 bool r3();
m2130 0:9577e971f55b 72 bool option();
m2130 0:9577e971f55b 73 bool share();
m2130 0:9577e971f55b 74 bool touchpad();
m2130 0:9577e971f55b 75 bool ps();
m2130 0:9577e971f55b 76 uint8_t l2An();
m2130 0:9577e971f55b 77 uint8_t r2An();
m2130 0:9577e971f55b 78 uint8_t lsx();
m2130 0:9577e971f55b 79 uint8_t lsy();
m2130 0:9577e971f55b 80 uint8_t rsx();
m2130 0:9577e971f55b 81 uint8_t rsy();
m2130 0:9577e971f55b 82 ~IM315PS4();
m2130 0:9577e971f55b 83 private:
m2130 0:9577e971f55b 84 Serial *dev;
m2130 0:9577e971f55b 85 Serial *_pc;
m2130 0:9577e971f55b 86 uint8_t *data;
m2130 0:9577e971f55b 87 uint8_t *DATA;
m2130 0:9577e971f55b 88 void get();
m2130 0:9577e971f55b 89 uint8_t ASCII(uint8_t data1, uint8_t data2);
m2130 0:9577e971f55b 90 int i;
m2130 0:9577e971f55b 91 int val;
m2130 0:9577e971f55b 92 int len;
m2130 0:9577e971f55b 93 };
m2130 0:9577e971f55b 94 #endif