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

Dependencies:   mbed MultiSerial

Revision:
6:26e5a520472d
Parent:
5:82d4d00847dd
Child:
7:07863c4a74b8
--- 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