Takushima Yukimasa
/
R19_ManuTakukAHWGeo
a
SBDBT/SBDBT.cpp@0:761a63c6d020, 2019-08-22 (annotated)
- Committer:
- Tom0108
- Date:
- Thu Aug 22 09:26:20 2019 +0000
- Revision:
- 0:761a63c6d020
- Child:
- 1:199c4a71da88
08/22
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Tom0108 | 0:761a63c6d020 | 1 | #include "SBDBT.h" |
Tom0108 | 0:761a63c6d020 | 2 | //#include "YKNCT.h" |
Tom0108 | 0:761a63c6d020 | 3 | SBDBT::SBDBT(PinName p1, PinName p2) |
Tom0108 | 0:761a63c6d020 | 4 | { |
Tom0108 | 0:761a63c6d020 | 5 | i = 0; |
Tom0108 | 0:761a63c6d020 | 6 | readable = 0; |
Tom0108 | 0:761a63c6d020 | 7 | length = 8; |
Tom0108 | 0:761a63c6d020 | 8 | value = 128; |
Tom0108 | 0:761a63c6d020 | 9 | position = 0; |
Tom0108 | 0:761a63c6d020 | 10 | tmp = new char [length]; |
Tom0108 | 0:761a63c6d020 | 11 | data = new char [length]; |
Tom0108 | 0:761a63c6d020 | 12 | sr = new Serial(p1,p2); |
Tom0108 | 0:761a63c6d020 | 13 | sr -> baud(2400); |
Tom0108 | 0:761a63c6d020 | 14 | sr -> attach(this,&SBDBT::getf,Serial::RxIrq); |
Tom0108 | 0:761a63c6d020 | 15 | } |
Tom0108 | 0:761a63c6d020 | 16 | |
Tom0108 | 0:761a63c6d020 | 17 | SBDBT::SBDBT(PinName p1, PinName p2, int baud) |
Tom0108 | 0:761a63c6d020 | 18 | { |
Tom0108 | 0:761a63c6d020 | 19 | i = 0; |
Tom0108 | 0:761a63c6d020 | 20 | readable = 0; |
Tom0108 | 0:761a63c6d020 | 21 | length = 8; |
Tom0108 | 0:761a63c6d020 | 22 | value = 128; |
Tom0108 | 0:761a63c6d020 | 23 | position = 0; |
Tom0108 | 0:761a63c6d020 | 24 | tmp = new char [length]; |
Tom0108 | 0:761a63c6d020 | 25 | data = new char [length]; |
Tom0108 | 0:761a63c6d020 | 26 | sr = new Serial(p1,p2); |
Tom0108 | 0:761a63c6d020 | 27 | sr -> baud(baud); |
Tom0108 | 0:761a63c6d020 | 28 | sr -> attach(this,&SBDBT::getf,Serial::RxIrq); |
Tom0108 | 0:761a63c6d020 | 29 | } |
Tom0108 | 0:761a63c6d020 | 30 | |
Tom0108 | 0:761a63c6d020 | 31 | void SBDBT::getf() |
Tom0108 | 0:761a63c6d020 | 32 | { |
Tom0108 | 0:761a63c6d020 | 33 | tmp[i] = sr -> getc(); |
Tom0108 | 0:761a63c6d020 | 34 | if(tmp[i] == value) { //受信したデータが訂正用定数であり |
Tom0108 | 0:761a63c6d020 | 35 | if(i != position) { //訂正用定数を受信すべき位置でないとき |
Tom0108 | 0:761a63c6d020 | 36 | tmp[position] = value; //正しい位置に訂正用定数を代入 |
Tom0108 | 0:761a63c6d020 | 37 | i = position + 1; //受信先も正しい位置へもどす |
Tom0108 | 0:761a63c6d020 | 38 | } else //訂正用定数を受信すべき位置であるとき |
Tom0108 | 0:761a63c6d020 | 39 | i++; //次の位置で受信する |
Tom0108 | 0:761a63c6d020 | 40 | } else { //受信したデータが訂正用定数でなく |
Tom0108 | 0:761a63c6d020 | 41 | if(i == position) {} //訂正用定数を受信すべき位置であるとき |
Tom0108 | 0:761a63c6d020 | 42 | //再度同じ位置で受信する |
Tom0108 | 0:761a63c6d020 | 43 | else //訂正用定数を受信すべき場所でないとき |
Tom0108 | 0:761a63c6d020 | 44 | i++; //次の位置で受信する |
Tom0108 | 0:761a63c6d020 | 45 | } |
Tom0108 | 0:761a63c6d020 | 46 | if(i>=length) { //位置がデータの長さを超えたら |
Tom0108 | 0:761a63c6d020 | 47 | data[0] = tmp[0]; |
Tom0108 | 0:761a63c6d020 | 48 | data[1] = tmp[1]; |
Tom0108 | 0:761a63c6d020 | 49 | data[2] = tmp[2]; |
Tom0108 | 0:761a63c6d020 | 50 | data[3] = tmp[3]; |
Tom0108 | 0:761a63c6d020 | 51 | data[4] = tmp[4]; |
Tom0108 | 0:761a63c6d020 | 52 | data[5] = tmp[5]; |
Tom0108 | 0:761a63c6d020 | 53 | data[6] = tmp[6]; |
Tom0108 | 0:761a63c6d020 | 54 | data[7] = tmp[7]; |
Tom0108 | 0:761a63c6d020 | 55 | readable = 1; //全データ受信完了 |
Tom0108 | 0:761a63c6d020 | 56 | check(); |
Tom0108 | 0:761a63c6d020 | 57 | i=0; //位置を初期化 |
Tom0108 | 0:761a63c6d020 | 58 | } |
Tom0108 | 0:761a63c6d020 | 59 | } |
Tom0108 | 0:761a63c6d020 | 60 | |
Tom0108 | 0:761a63c6d020 | 61 | void SBDBT::print() |
Tom0108 | 0:761a63c6d020 | 62 | { |
Tom0108 | 0:761a63c6d020 | 63 | printf("%2d%2d%2d%2d%2d%2d%2d%2d%2d%2d\n\r",TRIANGLE,CIRCLE,CROSS,SQUARE,UPkey,RIGHTkey,DOWNkey,LEFTkey,SELECT,START); |
Tom0108 | 0:761a63c6d020 | 64 | } |
Tom0108 | 0:761a63c6d020 | 65 | |
Tom0108 | 0:761a63c6d020 | 66 | int8_t SBDBT::State_check() |
Tom0108 | 0:761a63c6d020 | 67 | { |
Tom0108 | 0:761a63c6d020 | 68 | if(readable == 1)return 1; |
Tom0108 | 0:761a63c6d020 | 69 | else return 0; |
Tom0108 | 0:761a63c6d020 | 70 | } |
Tom0108 | 0:761a63c6d020 | 71 | |
Tom0108 | 0:761a63c6d020 | 72 | void SBDBT::check() |
Tom0108 | 0:761a63c6d020 | 73 | { |
Tom0108 | 0:761a63c6d020 | 74 | SQUARE=(data[1] & 1)==1; |
Tom0108 | 0:761a63c6d020 | 75 | L1 = (data[1] & 2)==2; |
Tom0108 | 0:761a63c6d020 | 76 | L2 = (data[1] & 4)==4; |
Tom0108 | 0:761a63c6d020 | 77 | L3 = (data[1] & 8); |
Tom0108 | 0:761a63c6d020 | 78 | R1 = (data[1] & 16); |
Tom0108 | 0:761a63c6d020 | 79 | R2 = (data[1] & 32); |
Tom0108 | 0:761a63c6d020 | 80 | R3 = (data[1] & 64); |
Tom0108 | 0:761a63c6d020 | 81 | |
Tom0108 | 0:761a63c6d020 | 82 | UPkey = (data[2] & 1)==1&&(data[2] & 2)!=2; |
Tom0108 | 0:761a63c6d020 | 83 | DOWNkey = (data[2] & 2)==2&&(data[2] & 1)!=1; |
Tom0108 | 0:761a63c6d020 | 84 | START = (data[2] & 3)==3; |
Tom0108 | 0:761a63c6d020 | 85 | RIGHTkey = (data[2] & 4)==4&&(data[2] & 8)!=8; |
Tom0108 | 0:761a63c6d020 | 86 | LEFTkey = (data[2] & 8)==8&&(data[2] & 4)!=4; |
Tom0108 | 0:761a63c6d020 | 87 | SELECT = (data[2] & 12)==12; |
Tom0108 | 0:761a63c6d020 | 88 | TRIANGLE = (data[2] & 16)==16; |
Tom0108 | 0:761a63c6d020 | 89 | CROSS = (data[2] & 32)==32; |
Tom0108 | 0:761a63c6d020 | 90 | CIRCLE = (data[2] & 64)==64; |
Tom0108 | 0:761a63c6d020 | 91 | |
Tom0108 | 0:761a63c6d020 | 92 | LX = data[3]; |
Tom0108 | 0:761a63c6d020 | 93 | LY = data[4]; |
Tom0108 | 0:761a63c6d020 | 94 | RX = data[5]; |
Tom0108 | 0:761a63c6d020 | 95 | RY = data[6]; |
Tom0108 | 0:761a63c6d020 | 96 | } |
Tom0108 | 0:761a63c6d020 | 97 | |
Tom0108 | 0:761a63c6d020 | 98 | |
Tom0108 | 0:761a63c6d020 | 99 | char SBDBT::rs_x_check() |
Tom0108 | 0:761a63c6d020 | 100 | { |
Tom0108 | 0:761a63c6d020 | 101 | return data[5]==data[5] ? 0 : 1; |
Tom0108 | 0:761a63c6d020 | 102 | } |
Tom0108 | 0:761a63c6d020 | 103 | |
Tom0108 | 0:761a63c6d020 | 104 | char SBDBT::rs_y_check() |
Tom0108 | 0:761a63c6d020 | 105 | { |
Tom0108 | 0:761a63c6d020 | 106 | return data[6]==data[6] ? 0 : 1; |
Tom0108 | 0:761a63c6d020 | 107 | } |
Tom0108 | 0:761a63c6d020 | 108 | |
Tom0108 | 0:761a63c6d020 | 109 | char SBDBT::ls_x_check() |
Tom0108 | 0:761a63c6d020 | 110 | { |
Tom0108 | 0:761a63c6d020 | 111 | return data[3]==data[3] ? 0 : 1; |
Tom0108 | 0:761a63c6d020 | 112 | } |
Tom0108 | 0:761a63c6d020 | 113 | |
Tom0108 | 0:761a63c6d020 | 114 | char SBDBT::ls_y_check() |
Tom0108 | 0:761a63c6d020 | 115 | { |
Tom0108 | 0:761a63c6d020 | 116 | return data[4]==data[4] ? 0 : 1; |
Tom0108 | 0:761a63c6d020 | 117 | } |
Tom0108 | 0:761a63c6d020 | 118 | |
Tom0108 | 0:761a63c6d020 | 119 | SBDBT::~SBDBT() |
Tom0108 | 0:761a63c6d020 | 120 | { |
Tom0108 | 0:761a63c6d020 | 121 | delete sr; |
Tom0108 | 0:761a63c6d020 | 122 | delete tmp; |
Tom0108 | 0:761a63c6d020 | 123 | delete data; |
Tom0108 | 0:761a63c6d020 | 124 | } |
Tom0108 | 0:761a63c6d020 | 125 |