gyo
Diff: SBDBT.cpp
- Revision:
- 1:8810976be033
- Parent:
- 0:afe58893bfe7
- Child:
- 2:1472e7c5317d
--- a/SBDBT.cpp Sat May 06 02:12:51 2017 +0000 +++ b/SBDBT.cpp Sat May 06 02:32:51 2017 +0000 @@ -3,28 +3,59 @@ namespace raven { - - SBDBT::SBDBT(PinName p1, PinName p2) { i = 0; flag = 0; - char data[8]={}; - char olddata[8]={}; + length = 8; + value = 128; + position = 0; + data = new char [length]; + olddata = new char [length]; sr = new Serial(p1,p2); sr -> baud(2400); - sr -> attach(this,&SBDBT::getd,Serial::RxIrq); + sr -> attach(this,&SBDBT::getf,Serial::RxIrq); } - void SBDBT::getd() + SBDBT::SBDBT(PinName p1, PinName p2, int baud) + { + i = 0; + flag = 0; + length = 8; + value = 128; + position = 0; + data = new char [length]; + olddata = new char [length]; + sr = new Serial(p1,p2); + sr -> baud(baud); + sr -> attach(this,&SBDBT::getf,Serial::RxIrq); + } + + void SBDBT::getf() { olddata[i] = data[i]; data[i] = sr -> getc(); - i++; - if(i>=8) + if(data[i] == value) //受信したデータが訂正用定数であり { - i=0; - flag = 1; + if(i != position) //訂正用定数を受信すべき位置でないとき + { + data[position] = value; //正しい位置に訂正用定数を代入 + i = position + 1; //受信先も正しい位置へもどす + } + else //訂正用定数を受信すべき位置であるとき + i++; //次の位置で受信する + } + else //受信したデータが訂正用定数でなく + { + if(i == position){} //訂正用定数を受信すべき位置であるとき + //再度同じ位置で受信する + else //訂正用定数を受信すべき場所でないとき + i++; //次の位置で受信する + } + if(i>=length) //位置がデータの長さを超えたら + { + i=0; //位置を初期化 + flag = 1; //全データ受信完了 } } @@ -32,6 +63,4 @@ { delete sr; } - - }//namespace \ No newline at end of file