中継機能つけた受け取りオムニ

Dependencies:   mbed MultiSerial

main.cpp

Committer:
Hatter
Date:
2014-08-19
Revision:
3:1f1498403eec
Parent:
2:d0de0fab161f
Child:
4:5da566692b79

File content as of revision 3:1f1498403eec:

/*
 * 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
int addr = 0x01;
char buff[1];

//serial init
volatile uint8_t INdata[DATA_NUM]={0};

//armMbed.frequency(10000);

void getData() //serial xbee to mbed
{  
    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;
        }
}