PS4 controller with IM315

Dependents:  

Revision:
0:9577e971f55b
Child:
1:090d61e465d7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/IM315PS4.hpp	Sat Aug 06 07:19:29 2022 +0000
@@ -0,0 +1,94 @@
+#ifndef IM315PS4_H
+#define IM315PS4_H
+#include "mbed.h"
+
+//DATA[1]
+#define TRI      0x01
+#define CIRCLE   0x02
+#define SQUARE   0x04
+#define CROSS    0x08
+#define TOUCHPAD 0x10
+#define PS       0x20
+#define L1       0x40
+#define R1       0x80
+
+//DATA[2]
+#define UP       0x01
+#define RIGHT    0x02
+#define LEFT     0x04
+#define DOWN     0x08
+#define OPTION   0x10
+#define SHARE    0x20
+#define L3       0x40
+#define R3       0x80
+
+/*IM315を用いてPS4コントローラ(DS2)を使う *受信
+  例 F446RE用IM315接続基盤の場合
+  IM315PS4 ds4(A0, A1);                           マイコン ~ PC間のボーレート指定なし(9600)
+  IM315PS4 ds4(A0, A1, 115200);                   マイコン ~ PC間のボーレート指定あり
+  
+  
+  DS4はArduino Nano用読み取り基盤を用いてボタンの状態を読み取り下記のような8バイトの文字列データ(16進数表記)にして送信してください
+ /-------------------------------------------- 
+  DATA[0]           上の表に対応するように
+  DATA[1]           上の表に対応するように
+  DATA[2]           0x00 ~ 0xff
+  DATA[3]           0x00 ~ 0xff
+  DATA[4] ~ DATA[7] 左右スティックのアナログ値 4 -> LスティックのX値 5 -> LスティックのY値 6, 7 -> Rスティックで同様
+  
+  例 01040000ff000000    △ボタンと十字左ボタンが押され、Lスティックを最大まで右に倒した場合
+ /--------------------------------------------
+ 
+ 
+ /---------- sbdbtライブラリとの相違点 ----------
+  ・ニュートラル関数がない
+  ・L2 R2ボタンがアナログでのみ使用可能
+  ・L3 R3ボタン(スティック押し込み)が使用可能
+  ・PSボタン タッチパッドが使用可能
+  ・スティックの入力範囲が 0 ~ 255 となっている
+  ・スティックの初期値(ニュートラル値)は 0x7f(127)
+ /--------------------------------------------
+ 
+*/
+
+class IM315PS4{
+public:
+    IM315PS4(PinName TX, PinName RX);              //マイコン ~ PC間のボーレート指定なし(9600)
+    IM315PS4(PinName TX, PinName RX, int baud);    //マイコン ~ PC間のボーレート指定あり
+    void button_state();                           //全ボタン, スティックの状態表示
+    void data_print();
+    bool up();
+    bool right();
+    bool left();
+    bool down();
+    bool tri();
+    bool circle();
+    bool square();
+    bool cross();
+    bool l1();
+    bool r1();
+    bool l3();
+    bool r3();
+    bool option();
+    bool share();
+    bool touchpad();
+    bool ps();
+    uint8_t l2An();
+    uint8_t r2An();
+    uint8_t lsx();
+    uint8_t lsy();
+    uint8_t rsx();
+    uint8_t rsy();
+    ~IM315PS4();
+private:
+    Serial *dev;
+    Serial *_pc;
+    uint8_t *data;
+    uint8_t *DATA;
+    void get();
+    uint8_t ASCII(uint8_t data1, uint8_t data2);
+    int i;
+    int val;
+    int len;
+};
+#endif
\ No newline at end of file