中継機能つけた受け取りオムニ
Dependencies: mbed MultiSerial
main.cpp
- Committer:
- Hatter
- Date:
- 2014-08-20
- Revision:
- 4:5da566692b79
- Parent:
- 3:1f1498403eec
- Child:
- 5:82d4d00847dd
File content as of revision 4:5da566692b79:
/* * 4WD_OMNI_simple by Tomoki Hokida * Simple Type * * motor pins piar * motor(p21,p22):motor(p23,p24) * motor(p25,p26):motor(p27,p28) * 通信中継用 * data 5~8 arm * data 1~4:omni * reset 0 */ #include "mbed.h" #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); I2C armMbed(p9,p10); RawSerial xbee(p13,p14); //i2c init const int addr = 0x01; //serial init volatile uint8_t INdata[DATA_NUM]={0}; //armMbed.frequency(10000); void getData() //serial xbee to mbed { char buff[1]; 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() { xbee.attach(&getData, RawSerial::RxIrq); for(;;){ 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; } }