PS4 controller with IM315
IM315PS4.hpp@2:83f5186d950c, 2022-10-12 (annotated)
- Committer:
- m2130
- Date:
- Wed Oct 12 09:35:15 2022 +0000
- Revision:
- 2:83f5186d950c
- Parent:
- 1:090d61e465d7
hage;
Who changed what in which revision?
User | Revision | Line number | New 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 | 1:090d61e465d7 | 25 | /*IM315を用いてPS4コントローラ(DS4)を使う *受信 |
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 | 2:83f5186d950c | 60 | bool available(); |
m2130 | 0:9577e971f55b | 61 | bool up(); |
m2130 | 0:9577e971f55b | 62 | bool right(); |
m2130 | 0:9577e971f55b | 63 | bool left(); |
m2130 | 0:9577e971f55b | 64 | bool down(); |
m2130 | 0:9577e971f55b | 65 | bool tri(); |
m2130 | 0:9577e971f55b | 66 | bool circle(); |
m2130 | 0:9577e971f55b | 67 | bool square(); |
m2130 | 0:9577e971f55b | 68 | bool cross(); |
m2130 | 0:9577e971f55b | 69 | bool l1(); |
m2130 | 0:9577e971f55b | 70 | bool r1(); |
m2130 | 0:9577e971f55b | 71 | bool l3(); |
m2130 | 0:9577e971f55b | 72 | bool r3(); |
m2130 | 0:9577e971f55b | 73 | bool option(); |
m2130 | 0:9577e971f55b | 74 | bool share(); |
m2130 | 0:9577e971f55b | 75 | bool touchpad(); |
m2130 | 0:9577e971f55b | 76 | bool ps(); |
m2130 | 0:9577e971f55b | 77 | uint8_t l2An(); |
m2130 | 0:9577e971f55b | 78 | uint8_t r2An(); |
m2130 | 0:9577e971f55b | 79 | uint8_t lsx(); |
m2130 | 0:9577e971f55b | 80 | uint8_t lsy(); |
m2130 | 0:9577e971f55b | 81 | uint8_t rsx(); |
m2130 | 0:9577e971f55b | 82 | uint8_t rsy(); |
m2130 | 0:9577e971f55b | 83 | ~IM315PS4(); |
m2130 | 0:9577e971f55b | 84 | private: |
m2130 | 0:9577e971f55b | 85 | Serial *dev; |
m2130 | 0:9577e971f55b | 86 | Serial *_pc; |
m2130 | 0:9577e971f55b | 87 | uint8_t *data; |
m2130 | 0:9577e971f55b | 88 | uint8_t *DATA; |
m2130 | 0:9577e971f55b | 89 | void get(); |
m2130 | 0:9577e971f55b | 90 | uint8_t ASCII(uint8_t data1, uint8_t data2); |
m2130 | 2:83f5186d950c | 91 | bool flag; |
m2130 | 0:9577e971f55b | 92 | int i; |
m2130 | 0:9577e971f55b | 93 | int val; |
m2130 | 0:9577e971f55b | 94 | int len; |
m2130 | 0:9577e971f55b | 95 | }; |
m2130 | 0:9577e971f55b | 96 | #endif |