受け取りのコントローラのプログラム

Dependencies:   TextLCD mbed MultiSerial Pswitch_Lib

Revision:
1:84625a611c5f
Parent:
0:d3702a4e32ea
Child:
2:7820849bf534
diff -r d3702a4e32ea -r 84625a611c5f main.cpp
--- a/main.cpp	Thu Sep 04 01:32:01 2014 +0000
+++ b/main.cpp	Thu Sep 04 01:58:58 2014 +0000
@@ -1,11 +1,10 @@
 #include "mbed.h"
 #include "TextLCD.h"
+#include "MultiSerial.h"
 
-#define DATA_NUM 8+2//2byte→KEYCODE(拝啓)とCHECKCODE(敬具) 8byte→やりとりするデータ
+#define DATA_NUM 8
 #define TX_KEYCODE 0xAA//あちらのKEYCODE
 #define RX_KEYCODE 0xAA//こちらのKEYCODE
-#define KEY 0//KEYCODEは配列の最初
-#define CHECK DATA_NUM-1//CHECKCODEは配列の最後
 #define INTERVAL .5
 
 enum HAND{RIGHT=0, LEFT};
@@ -13,15 +12,13 @@
 enum COMPASS{NORTH=0, EAST, SOUTH, WEST};
 enum COLOR{YELLOW=0, RED, GREEN, BLUE};
 
-volatile uint8_t INdata[DATA_NUM]={0}, EXdata[DATA_NUM]={0};
+uint8_t INdata[DATA_NUM]={0}, EXdata[DATA_NUM]={0};
 volatile uint8_t count=0;
 
 void SetUp();
 bool GetBit(uint8_t n, uint8_t bit);
 uint8_t LinkBit(bool eight, bool seven, bool six, bool five, bool fore, bool three, bool two, bool one);
 void illumination();
-void TX();
-void RX();
 
 Ticker flick;
 BusOut LED(LED1, LED2, LED3, LED4);
@@ -32,7 +29,7 @@
 DigitalIn SideKey[2][2]={{p17, p20}, {p18, p19}};
 DigitalIn Toggle(p5);
 
-Serial Xbee(p9, p10);//or p13, p14
+MultiSerial Xbee(p9, p10, write);//or p13, p14
 Serial pc(USBTX, USBRX);
  
 TextLCD lcd(p26, p25, p24, p23, p22, p21, TextLCD::LCD16x2); // rs, e, d4-d7
@@ -45,21 +42,21 @@
         
         YLED=!Toggle;
         
-        EXdata[1] = LinkBit(!CrossKey[YELLOW][LEFT], !CrossKey[RED][LEFT], !CrossKey[GREEN][LEFT], !CrossKey[BLUE][LEFT], 
+        EXdata[0] = LinkBit(!CrossKey[YELLOW][LEFT], !CrossKey[RED][LEFT], !CrossKey[GREEN][LEFT], !CrossKey[BLUE][LEFT], 
                             !CrossKey[YELLOW][RIGHT], !CrossKey[RED][RIGHT], !CrossKey[GREEN][RIGHT], !CrossKey[BLUE][RIGHT]);
-        EXdata[2] = LinkBit(0, 0, 0, 0, !SideKey[INDEX][LEFT], !SideKey[MIDDLE][LEFT], !SideKey[INDEX][RIGHT], !SideKey[MIDDLE][RIGHT]);
+        EXdata[1] = LinkBit(0, 0, 0, 0, !SideKey[INDEX][LEFT], !SideKey[MIDDLE][LEFT], !SideKey[INDEX][RIGHT], !SideKey[MIDDLE][RIGHT]);
+        EXdata[2] = LinkBit(0, 0, 0, 0, 0, 0, 0, 0);
         EXdata[3] = LinkBit(0, 0, 0, 0, 0, 0, 0, 0);
         EXdata[4] = LinkBit(0, 0, 0, 0, 0, 0, 0, 0);
         EXdata[5] = LinkBit(0, 0, 0, 0, 0, 0, 0, 0);
         EXdata[6] = LinkBit(0, 0, 0, 0, 0, 0, 0, 0);
         EXdata[7] = LinkBit(0, 0, 0, 0, 0, 0, 0, 0);
-        EXdata[8] = LinkBit(0, 0, 0, 0, 0, 0, 0, 0);
     }
 }
 
 void SetUp(void){
     
-    uint8_t i=1;
+    Xbee.write_data(EXdata, TX_KEYCODE);
     
     lcd.printf("Hello World!\n");
     
@@ -79,13 +76,7 @@
     
     Toggle.mode(PullUp);
     
-    //flick.attach(illumination, INTERVAL);
-    
-    Xbee.attach(&TX, Serial::TxIrq);//送信バッファ空き割込み
-    //Xbee.attach(&RX, Serial::RxIrq);//受信割込み
-    
-    Xbee.putc(i);//送信開始
-    //i = Xbee.getc();//受信開始
+    flick.attach(illumination, INTERVAL);
 }
 bool GetBit(uint8_t n, uint8_t bit){//整数nのbitビット目は1か0か.
     return (n>>(bit-1))%2;
@@ -96,72 +87,4 @@
 void illumination(void){//literally
     count++;
     LED = count;
-}
-void TX(void){//送信バッファ空き割り込み用関数
-    
-    static uint8_t Tx=DATA_NUM, i;
-    static uint8_t TXdata[DATA_NUM]={TX_KEYCODE};
-    static uint8_t TXcheckcode=0;
-    
-    if(Tx >= DATA_NUM){
-        
-        TXdata[KEY] = TX_KEYCODE;//Hello.
-        
-        TXdata[1] = EXdata[1];
-        TXdata[2] = EXdata[2];
-        TXdata[3] = EXdata[3];
-        TXdata[4] = EXdata[4];
-        TXdata[5] = EXdata[5];
-        TXdata[6] = EXdata[6];
-        TXdata[7] = EXdata[7];
-        TXdata[8] = EXdata[8];
-        //送信するデータ = メインで処理されたデータ
-        
-        for(i=KEY+1, TXcheckcode=0; i<CHECK; i++){//CHECKCODEの生成
-            TXcheckcode ^= TXdata[i];
-        }
-        
-        TXdata[CHECK] = TXcheckcode;//Good bye.
-        Tx=0;//配列をリセット
-        
-    }
-    Xbee.putc(TXdata[Tx]);//データを送信する
-    Tx++;//配列を入れ替える
-    
-}
-void RX(void){//受信割り込み用関数
-    
-    static uint8_t Rx=0, i;
-    static uint8_t RXdata[DATA_NUM]={RX_KEYCODE};
-    static uint8_t RXcheckcode=0;
-    
-    RXdata[Rx] = Xbee.getc();//データを受け取る
-    
-    if(RXdata[KEY]==RX_KEYCODE){//KEYCODEが一致したら配列を入れ替える
-        Rx++;
-    }
-    
-    if(Rx==CHECK){//CHECKCODEの生成
-        for(i=KEY+1, RXcheckcode=0; i<CHECK; i++){
-            RXcheckcode ^= RXdata[i];
-        }
-    }
-    
-    if(Rx >= DATA_NUM){
-        if(RXdata[CHECK]==RXcheckcode){//CHECKCODEが合致したらデータを適用する
-            
-            INdata[1] = RXdata[1];
-            INdata[2] = RXdata[2];
-            INdata[3] = RXdata[3];
-            INdata[4] = RXdata[4];
-            INdata[5] = RXdata[5];
-            INdata[6] = RXdata[6];
-            INdata[7] = RXdata[7];
-            INdata[8] = RXdata[8];
-            //メインで処理されるデータ = 受け取ったデータ
-            
-        }
-        Rx=0;//配列をリセット
-    }
-    
 }
\ No newline at end of file