中継機能つけた受け取りオムニ
Dependencies: mbed MultiSerial
Diff: main.cpp
- Revision:
- 6:26e5a520472d
- Parent:
- 5:82d4d00847dd
- Child:
- 7:07863c4a74b8
diff -r 82d4d00847dd -r 26e5a520472d main.cpp --- a/main.cpp Wed Aug 20 08:05:03 2014 +0000 +++ b/main.cpp Mon Sep 01 02:05:19 2014 +0000 @@ -6,82 +6,65 @@ * motor(p21,p22):motor(p23,p24) * motor(p25,p26):motor(p27,p28) * 通信中継用 - * data 5~8 arm - * data 1~4:omni + * data[0]:arm + * data[1]:omni * reset 0 */ #include "mbed.h" -#include <math.h> -#include "RawSerial.h" +#include "MultiSerial.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 +#define DATA_NUM 2 //DATA_NUM[byte]通信 +#define XBEE_KEY 0xAA//keycode +#define ARM_KEY 0x0A DigitalOut check(LED1); +DigitalOut arm_check(LED2); + BusOut motors(p21,p22,p23,p24,p25,p26,p27,p28); -I2C armMbed(p9,p10); -RawSerial xbee(p13,p14); +//I2C armMbed(p9,p10); -//i2c init -const int addr = 0x01; - -//serial init -volatile uint8_t INdata[DATA_NUM]={0}; +MultiSerial xbee(p13,p14); +MultiSerial armMbed(p9,p10); //armMbed.frequency(10000); -void getData() //serial xbee to mbed -{ - char buff[1]; +typedef struct{ + + uint8_t arm[1]; + uint8_t leg; - 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]; - }else{ - - error("XXX"); - } - RX=0; - - buff[0]=INdata[1]; - armMbed.write(addr,buff,1); - buff[0]=0; - - } -} +}xbee_packet; + +xbee_packet packet; + +uint8_t get_data[DATA_NUM]; int main() { - xbee.attach(&getData, RawSerial::RxIrq); + //int val; + + xbee_packet *pt_packet=&packet; + + xbee.read(get_data,XBEE_KEY); 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; - } + // xbee.baud(1200); + + memcpy(&packet, get_data, DATA_NUM); //ちょい危険 + + if(packet.leg==0x0) motors = 0; + if(packet.leg&0x10) motors = 0x05; //p21,p23 + if(packet.leg&0x20) motors = 0x0A; //p22,p24 + if(packet.leg&0x40) motors = 0x50; //p25,p27 + if(packet.leg&0x80) motors = 0xA0; //p26,p28 + + armMbed.write(pt_packet->arm,ARM_KEY); + +// val = armMbed.write(slave_addr,pt_packet->arm,1); +// if(!val) i2c_check = 1; else i2c_check = 0; + + check = !check; + } } \ No newline at end of file