IM315を用いてDS2(PS2コントローラー)を扱うライブラリ
IM315.hpp@0:06c265b1fbd1, 2022-04-04 (annotated)
- Committer:
- m2130
- Date:
- Mon Apr 04 06:15:23 2022 +0000
- Revision:
- 0:06c265b1fbd1
- Child:
- 1:9ad38dad969c
IM315 de DS2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
m2130 | 0:06c265b1fbd1 | 1 | #ifndef IM315_H |
m2130 | 0:06c265b1fbd1 | 2 | #define IM315_H |
m2130 | 0:06c265b1fbd1 | 3 | #include "mbed.h" |
m2130 | 0:06c265b1fbd1 | 4 | |
m2130 | 0:06c265b1fbd1 | 5 | //DATA[1] |
m2130 | 0:06c265b1fbd1 | 6 | #define TRI 0x01 |
m2130 | 0:06c265b1fbd1 | 7 | #define CIRCLE 0x02 |
m2130 | 0:06c265b1fbd1 | 8 | #define SQUARE 0x04 |
m2130 | 0:06c265b1fbd1 | 9 | #define CROSS 0x08 |
m2130 | 0:06c265b1fbd1 | 10 | #define L2 0x10 |
m2130 | 0:06c265b1fbd1 | 11 | #define R2 0x20 |
m2130 | 0:06c265b1fbd1 | 12 | #define L1 0x40 |
m2130 | 0:06c265b1fbd1 | 13 | #define R1 0x80 |
m2130 | 0:06c265b1fbd1 | 14 | |
m2130 | 0:06c265b1fbd1 | 15 | //DATA[2] |
m2130 | 0:06c265b1fbd1 | 16 | #define UP 0x01 |
m2130 | 0:06c265b1fbd1 | 17 | #define RIGHT 0x02 |
m2130 | 0:06c265b1fbd1 | 18 | #define LEFT 0x04 |
m2130 | 0:06c265b1fbd1 | 19 | #define DOWN 0x08 |
m2130 | 0:06c265b1fbd1 | 20 | #define START 0x10 |
m2130 | 0:06c265b1fbd1 | 21 | #define SELECT 0x20 |
m2130 | 0:06c265b1fbd1 | 22 | #define L3 0x40 |
m2130 | 0:06c265b1fbd1 | 23 | #define R3 0x80 |
m2130 | 0:06c265b1fbd1 | 24 | |
m2130 | 0:06c265b1fbd1 | 25 | /*IM315を用いてPS2コントローラ(DS2)を使う *受信 |
m2130 | 0:06c265b1fbd1 | 26 | 例 L432KC用IM315接続基盤の場合 |
m2130 | 0:06c265b1fbd1 | 27 | IM315 ds2(D1, D0); マイコン ~ PC間のボーレート指定なし(9600) |
m2130 | 0:06c265b1fbd1 | 28 | IM315 ds2(D1, D0, 115200); マイコン ~ PC間のボーレート指定あり |
m2130 | 0:06c265b1fbd1 | 29 | |
m2130 | 0:06c265b1fbd1 | 30 | DS2はArduino Nano用読み取り基盤を用いてボタンの状態を読み取り下記のような8バイトの文字列データ(16進数表記)にして送信してください |
m2130 | 0:06c265b1fbd1 | 31 | /-------------------------------------------- |
m2130 | 0:06c265b1fbd1 | 32 | DATA[0] 0x80固定 |
m2130 | 0:06c265b1fbd1 | 33 | DATA[1] 上の表に対応するように |
m2130 | 0:06c265b1fbd1 | 34 | DATA[2] 上の表に対応するように |
m2130 | 0:06c265b1fbd1 | 35 | DATA[3] 0x00固定 |
m2130 | 0:06c265b1fbd1 | 36 | DATA[4] ~ DATA[7] 左右スティックのアナログ値 4 -> LスティックのX値 5 -> LスティックのY値 6, 7 -> Rスティックで同様 |
m2130 | 0:06c265b1fbd1 | 37 | |
m2130 | 0:06c265b1fbd1 | 38 | 例 80010400FF808080 △ボタンと十字左ボタンが押され、Lスティックを最大まで右に倒した場合 |
m2130 | 0:06c265b1fbd1 | 39 | /-------------------------------------------- |
m2130 | 0:06c265b1fbd1 | 40 | |
m2130 | 0:06c265b1fbd1 | 41 | /---------- sbdbtライブラリとの相違点 ---------- |
m2130 | 0:06c265b1fbd1 | 42 | ・ニュートラル関数がない(スティックのニュートラル値が定まらずほぼ機能していない) |
m2130 | 0:06c265b1fbd1 | 43 | ・L2 R2ボタンがアナログで使用不可能 |
m2130 | 0:06c265b1fbd1 | 44 | ・L3 R3ボタン(スティック押し込み)が使用可能 |
m2130 | 0:06c265b1fbd1 | 45 | ・スティックの入力範囲が 0 ~ 255 となっている |
m2130 | 0:06c265b1fbd1 | 46 | ・スティックの初期値(ニュートラル値)は 0x7f ~ 0x80(127 ~ 128)だと思われる 定まらない(ハードウェア上の問題?) |
m2130 | 0:06c265b1fbd1 | 47 | */ |
m2130 | 0:06c265b1fbd1 | 48 | |
m2130 | 0:06c265b1fbd1 | 49 | class IM315{ |
m2130 | 0:06c265b1fbd1 | 50 | public: |
m2130 | 0:06c265b1fbd1 | 51 | IM315(PinName TX, PinName RX); //マイコン ~ PC間のボーレート指定なし(9600) |
m2130 | 0:06c265b1fbd1 | 52 | IM315(PinName TX, PinName RX, int baud); //マイコン ~ PC間のボーレート指定あり |
m2130 | 0:06c265b1fbd1 | 53 | void button_state(); //全ボタン, スティックの状態表示 |
m2130 | 0:06c265b1fbd1 | 54 | void data_print(); |
m2130 | 0:06c265b1fbd1 | 55 | bool up(); |
m2130 | 0:06c265b1fbd1 | 56 | bool right(); |
m2130 | 0:06c265b1fbd1 | 57 | bool left(); |
m2130 | 0:06c265b1fbd1 | 58 | bool down(); |
m2130 | 0:06c265b1fbd1 | 59 | bool tri(); |
m2130 | 0:06c265b1fbd1 | 60 | bool circle(); |
m2130 | 0:06c265b1fbd1 | 61 | bool square(); |
m2130 | 0:06c265b1fbd1 | 62 | bool cross(); |
m2130 | 0:06c265b1fbd1 | 63 | bool l2(); |
m2130 | 0:06c265b1fbd1 | 64 | bool r2(); |
m2130 | 0:06c265b1fbd1 | 65 | bool l1(); |
m2130 | 0:06c265b1fbd1 | 66 | bool r1(); |
m2130 | 0:06c265b1fbd1 | 67 | bool start(); |
m2130 | 0:06c265b1fbd1 | 68 | bool select(); |
m2130 | 0:06c265b1fbd1 | 69 | bool l3(); |
m2130 | 0:06c265b1fbd1 | 70 | bool r3(); |
m2130 | 0:06c265b1fbd1 | 71 | char lsx(); |
m2130 | 0:06c265b1fbd1 | 72 | char lsy(); |
m2130 | 0:06c265b1fbd1 | 73 | char rsx(); |
m2130 | 0:06c265b1fbd1 | 74 | char rsy(); |
m2130 | 0:06c265b1fbd1 | 75 | ~IM315(); |
m2130 | 0:06c265b1fbd1 | 76 | private: |
m2130 | 0:06c265b1fbd1 | 77 | Serial *dev; |
m2130 | 0:06c265b1fbd1 | 78 | Serial *_pc; |
m2130 | 0:06c265b1fbd1 | 79 | unsigned char *data; |
m2130 | 0:06c265b1fbd1 | 80 | unsigned char *DATA; |
m2130 | 0:06c265b1fbd1 | 81 | void get(); |
m2130 | 0:06c265b1fbd1 | 82 | unsigned char ASCII(unsigned char data1, unsigned char data2); |
m2130 | 0:06c265b1fbd1 | 83 | int i; |
m2130 | 0:06c265b1fbd1 | 84 | int val; |
m2130 | 0:06c265b1fbd1 | 85 | int len; |
m2130 | 0:06c265b1fbd1 | 86 | }; |
m2130 | 0:06c265b1fbd1 | 87 | #endif |