a

Dependencies:   mbed

Committer:
Tom0108
Date:
Fri Oct 11 07:29:15 2019 +0000
Revision:
20:3f68738c4019
Parent:
14:e6d16095ffa8
Gyro reset measures

Who changed what in which revision?

UserRevisionLine numberNew 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 14:e6d16095ffa8 8 value = 255;
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 14:e6d16095ffa8 22 value = 255;
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 14:e6d16095ffa8 81 PS = (data[1] & 128);
Tom0108 0:761a63c6d020 82
Tom0108 0:761a63c6d020 83 UPkey = (data[2] & 1)==1&&(data[2] & 2)!=2;
Tom0108 0:761a63c6d020 84 DOWNkey = (data[2] & 2)==2&&(data[2] & 1)!=1;
Tom0108 0:761a63c6d020 85 START = (data[2] & 3)==3;
Tom0108 0:761a63c6d020 86 RIGHTkey = (data[2] & 4)==4&&(data[2] & 8)!=8;
Tom0108 0:761a63c6d020 87 LEFTkey = (data[2] & 8)==8&&(data[2] & 4)!=4;
Tom0108 0:761a63c6d020 88 SELECT = (data[2] & 12)==12;
Tom0108 0:761a63c6d020 89 TRIANGLE = (data[2] & 16)==16;
Tom0108 0:761a63c6d020 90 CROSS = (data[2] & 32)==32;
Tom0108 0:761a63c6d020 91 CIRCLE = (data[2] & 64)==64;
Tom0108 0:761a63c6d020 92
Tom0108 0:761a63c6d020 93 LX = data[3];
Tom0108 0:761a63c6d020 94 LY = data[4];
Tom0108 0:761a63c6d020 95 RX = data[5];
Tom0108 0:761a63c6d020 96 RY = data[6];
Tom0108 0:761a63c6d020 97 }
Tom0108 0:761a63c6d020 98
Tom0108 0:761a63c6d020 99
Tom0108 0:761a63c6d020 100 char SBDBT::rs_x_check()
Tom0108 0:761a63c6d020 101 {
Tom0108 0:761a63c6d020 102 return data[5]==data[5] ? 0 : 1;
Tom0108 0:761a63c6d020 103 }
Tom0108 0:761a63c6d020 104
Tom0108 0:761a63c6d020 105 char SBDBT::rs_y_check()
Tom0108 0:761a63c6d020 106 {
Tom0108 0:761a63c6d020 107 return data[6]==data[6] ? 0 : 1;
Tom0108 0:761a63c6d020 108 }
Tom0108 0:761a63c6d020 109
Tom0108 0:761a63c6d020 110 char SBDBT::ls_x_check()
Tom0108 0:761a63c6d020 111 {
Tom0108 0:761a63c6d020 112 return data[3]==data[3] ? 0 : 1;
Tom0108 0:761a63c6d020 113 }
Tom0108 0:761a63c6d020 114
Tom0108 0:761a63c6d020 115 char SBDBT::ls_y_check()
Tom0108 0:761a63c6d020 116 {
Tom0108 0:761a63c6d020 117 return data[4]==data[4] ? 0 : 1;
Tom0108 0:761a63c6d020 118 }
Tom0108 0:761a63c6d020 119
Tom0108 0:761a63c6d020 120 SBDBT::~SBDBT()
Tom0108 0:761a63c6d020 121 {
Tom0108 0:761a63c6d020 122 delete sr;
Tom0108 0:761a63c6d020 123 delete tmp;
Tom0108 0:761a63c6d020 124 delete data;
Tom0108 1:199c4a71da88 125 }