中継機能つけた受け取りオムニ
Dependencies: mbed MultiSerial
Diff: main.cpp
- Revision:
- 3:1f1498403eec
- Parent:
- 2:d0de0fab161f
- Child:
- 4:5da566692b79
--- a/main.cpp Tue Aug 19 11:24:13 2014 +0000 +++ b/main.cpp Tue Aug 19 11:58:06 2014 +0000 @@ -15,6 +15,12 @@ #include <math.h> #include "RawSerial.h" +#define DATA_NUM 4 //DATA_NUM[byte]通信 +#define MY_KEYCODE 0xAA//keycode +#define EN_KEYCODE 0xAA//keycode +#define KEY 0//number of first data +#define CHECK DATA_NUM-1//number of last data + DigitalOut check(LED1); BusOut motors(p21,p22,p23,p24,p25,p26,p27,p28); @@ -22,22 +28,40 @@ RawSerial xbee(p13,p14); //i2c init - int addr = 0x01; char buff[1]; -uint8_t value=0; -uint8_t omni_value=0; +//serial init +volatile uint8_t INdata[DATA_NUM]={0}; //armMbed.frequency(10000); void getData() //serial xbee to mbed -{ - value = xbee.getc(); - - buff[0]=value>>4; - omni_value=value<<4; +{ + static uint8_t RX=0, i; + static uint8_t RXdata[DATA_NUM]={EN_KEYCODE}; + static uint8_t RX_CHECKCODE=0; + RXdata[RX] = xbee.getc(); + if(RXdata[KEY]==EN_KEYCODE){ + RX++; + } + + if(RX==CHECK){ + for(i=KEY+1, RX_CHECKCODE=0; i<CHECK; i++){ + RX_CHECKCODE ^= RXdata[i]; + }//CHECKCODE作成 + } + if(RX >= DATA_NUM){ + if(RXdata[CHECK]==RX_CHECKCODE){ + INdata[1] = RXdata[1]; + INdata[2] = RXdata[2]; + } + RX=0; + } + + buff[0]=INdata[1]; armMbed.write(addr,buff,1); + buff[0]=0; } int main() @@ -45,11 +69,11 @@ xbee.attach(&getData, RawSerial::RxIrq); for(;;){ - if(omni_value==0x0) motors = 0; - if(omni_value&0x10) motors = 0x05; //p21,p23 - if(omni_value&0x20) motors = 0x0A; //p22,p24 - if(omni_value&0x40) motors = 0x50; //p25,p27 - if(omni_value&0x80) motors = 0xA0; //p26,p28 + if(INdata[2]==0x0) motors = 0; + if(INdata[2]&0x10) motors = 0x05; //p21,p23 + if(INdata[2]&0x20) motors = 0x0A; //p22,p24 + if(INdata[2]&0x40) motors = 0x50; //p25,p27 + if(INdata[2]&0x80) motors = 0xA0; //p26,p28 check = !check; }