
四輪オムニの足回りを動かすプログラム
Revision 1:cb4a6d5c77c8, committed 2022-10-08
- Comitter:
- m_smt
- Date:
- Sat Oct 08 11:14:39 2022 +0000
- Parent:
- 0:39c2bb18192b
- Commit message:
- move four wheel omni
Changed in this revision
diff -r 39c2bb18192b -r cb4a6d5c77c8 SBDBT.lib --- a/SBDBT.lib Sat Oct 08 11:13:31 2022 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -SBDBT#c1238992b60d
diff -r 39c2bb18192b -r cb4a6d5c77c8 SBDBT/SBDBT.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SBDBT/SBDBT.cpp Sat Oct 08 11:14:39 2022 +0000 @@ -0,0 +1,157 @@ +#include "SBDBT.hpp" +#include "mbed.h" + +Serial pc(USBTX,USBRX); + +sbdbt::sbdbt(PinName TX, PinName RX){ + i = 0; + pos = 0; + val = 0x80; + len = 10; + data = new char[len]; + PS3_Data = new char[len]; + dev = new Serial(TX, RX); + dev -> baud(9600); + dev -> attach(callback(this,&sbdbt::get),Serial::RxIrq); +} + +sbdbt::sbdbt(PinName TX, PinName RX, int baud){ + i = 0; + pos = 0; + val = 0x80; + len = 10; + data = new char[len]; + PS3_Data = new char[len]; + dev = new Serial(TX, RX); + dev -> baud(9600); + pc.baud(baud); + dev -> attach(callback(this,&sbdbt::get),Serial::RxIrq); +} + +void sbdbt::get(){ + data[i] = dev -> getc(); + if(data[i] == val){ + if(i != pos){ + data[pos] = val; + i = pos + 1; + } + else{ + i++; + } + } + else{ + if(i == pos); + else{ + i++; + } + } + if(i >= len){ + PS3_Data[0] = data[0]; + PS3_Data[1] = data[1]; + PS3_Data[2] = data[2]; + PS3_Data[3] = data[3]; + PS3_Data[4] = data[4]; + PS3_Data[5] = data[5]; + PS3_Data[6] = data[6]; + PS3_Data[7] = data[7]; + PS3_Data[8] = data[8]; + PS3_Data[9] = data[9]; + i = 0; + } +} + +void sbdbt::button_state(){pc.printf("UP: %d, DOW: %d, RIG: %d, LEF: %d, TRI: %d, CRO: %d, CIR: %d, SQU: %d, L1: %d, L2: %d, R1: %d, R2: %d, STA: %d, SEL: %d LSX: %3d, LSY: %3d, RSX: %3d, RY: %3d, L2An: %3d, R2An: %3d\n",up(), down(), right(), left(), tri(), cross(), circle(), square(), l1(), l2(), r1(), r2(), start(), select(), lsx(), lsy(), rsx(), rsy(), l2An(), r2An());} + +void sbdbt::data_print(){pc.printf("%2x %2x %2x %2x %2x %2x %2x %2x %2x %2x\n",PS3_Data[0], PS3_Data[1], PS3_Data[2], PS3_Data[3], PS3_Data[4], PS3_Data[5], PS3_Data[6], PS3_Data[7], PS3_Data[8], PS3_Data[9]);} + +bool sbdbt::neutral(){ + if(data[9] == 0) return 1; + return 0; +} + +bool sbdbt::up(){ + if(data[2] & UP) return 1; + return 0; +} + +bool sbdbt::down(){ + if(data[2] & DOWN) return 1; + return 0; +} + +bool sbdbt::left(){ + if(data[2] & LEFT) return 1; + return 0; +} + +bool sbdbt::right(){ + if(data[2] & RIGHT) return 1; + return 0; +} + +bool sbdbt::tri(){ + if(data[2] & TRI) return 1; + return 0; +} + +bool sbdbt::cross(){ + if(data[2] & CROSS) return 1; + return 0; +} + +bool sbdbt::square(){ + if(data[2] & SQUARE) return 1; + return 0; +} + +bool sbdbt::circle(){ + if(data[1] & CIRCLE) return 1; + return 0; +} +bool sbdbt::l1(){ + if(data[1] & L1) return 1; + return 0; +} + +bool sbdbt::l2(){ + if(data[1] & L2) return 1; + return 0; +} + +bool sbdbt::r1(){ + if(data[1] & R1) return 1; + return 0; +} + +bool sbdbt::r2(){ + if(data[1] & R2) return 1; + return 0; +} + +bool sbdbt::start(){ + if(data[1] & START) return 1; + return 0; +} + +bool sbdbt::select(){ + if(data[1] & SELECT) return 1; + return 0; +} + +char sbdbt::lsx(){return data[3];} + +char sbdbt::lsy(){return data[4];} + +char sbdbt::rsx(){return data[5];} + +char sbdbt::rsy(){return data[6];} + +char sbdbt::l2An(){return data[7];} + +char sbdbt::r2An(){return data[8];} + +sbdbt::~sbdbt(){ + delete dev; + delete data; + delete PS3_Data; +} \ No newline at end of file
diff -r 39c2bb18192b -r cb4a6d5c77c8 SBDBT/SBDBT.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SBDBT/SBDBT.hpp Sat Oct 08 11:14:39 2022 +0000 @@ -0,0 +1,67 @@ +#ifndef SBDBT_H +#define SBDBT_H +#include "mbed.h" + +//data[1] +#define CIRCLE 0x01 +#define L1 0x02 +#define L2 0x04 +#define R1 0x08 +#define R2 0x10 +#define START 0x20 +#define SELECT 0x40 + +//data[2] +#define UP 0x01 +#define DOWN 0x02 +#define LEFT 0x04 +#define RIGHT 0x08 +#define TRI 0x10 +#define CROSS 0x20 +#define SQUARE 0x40 + +/*SBDBTを用いてPS3コントローラ(DS3)を使う + sbdbt sb(A0, A1); マイコン ~ PC間のボーレート指定なし(9600) + sbdbt sb(A0, A1, 115200); マイコン ~ PC間のボーレート指定あり +*/ + +class sbdbt { +public: + sbdbt(PinName TX, PinName RX); //マイコン ~ PC間のボーレート指定なし(9600) + sbdbt(PinName TX, PinName RX, int baud); //マイコン ~ PC間のボーレート指定あり + void get(void); + void button_state(); //全ボタン, スティックの状態表示 + void data_print(); + bool neutral(); + bool up(); + bool down(); + bool left(); + bool right(); + bool tri(); + bool cross(); + bool square(); + bool circle(); + bool l1(); + bool l2(); + bool r1(); + bool r2(); + bool start(); + bool select(); + char lsx(); + char lsy(); + char rsx(); + char rsy(); + char l2An(); + char r2An(); + bool command(); + ~sbdbt(); +private: + Serial *dev; + char *data; + char *PS3_Data; + char i; + char pos; + char val; + char len; +}; +#endif \ No newline at end of file