Bチーム / Mbed 2 deprecated receiver_transmitter

Dependencies:   TextLCD mbed MultiSerial Pswitch_Lib

Files at this revision

API Documentation at this revision

Comitter:
lilac0112_1
Date:
Mon Sep 08 02:39:40 2014 +0000
Parent:
2:7820849bf534
Child:
4:39edc16ee5c3
Commit message:
?????

Changed in this revision

Pswitch_Lib.lib Show annotated file Show diff for this revision Revisions of this file
ReadMe.txt Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Pswitch_Lib.lib	Mon Sep 08 02:39:40 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/MBE13170/code/Pswitch_Lib/#a0eb75ae437f
--- a/ReadMe.txt	Thu Sep 04 22:17:32 2014 +0000
+++ b/ReadMe.txt	Mon Sep 08 02:39:40 2014 +0000
@@ -1,45 +1,123 @@
 仕様書
-
+●マイコンのピンの使用状況
 ピン  接続先             備考
 p4  プッシュスイッチ    リセットボタン
 p5  トグルスイッチ     
-p6  YellowLED
+p6  黄色LED
 p7  右十字キー           予約
-p8  右十字キー           Yellow
+p8  右十字キー           黄
 p9  スライドスイッチ>Xbee   送信
 p10 スライドスイッチ>Xbee   受信
-p11 右十字キー           Red
+p11 右十字キー           赤
 p12 右十字キー           予約
 p13 スライドスイッチ>Xbee   送信
 p14 スライドスイッチ>Xbee   受信
-p15 右十字キー           Green
-p16 右十字キー           Blue
-p17 右サイドキー          人差し指
-p18 右サイドキー          中指
-p19 左サイドキー          中指
-p20 左サイドキー          人差し指
+p15 右十字キー           緑
+p16 右十字キー           青
+p17 右サイドキー          赤
+p18 右サイドキー          青
+p19 左サイドキー          青
+p20 左サイドキー          赤
 p21 LCD                 d7
 p22 LCD                 d6
 p23 LCD                 d5
 p24 LCD                 d4
 p25 LCD                 e
 p26 LCD                 rs
-p27 左十字キー           Blue
-p28 左十字キー           Green
-p29 左十字キー           Red
-p30 左十字キー           Yellow
-LED1    illumination()
-LED2    illumination()
-LED3    illumination()
-LED4    illumination()
+p27 左十字キー           青
+p28 左十字キー           緑
+p29 左十字キー           赤
+p30 左十字キー           黄
+
+●LCDの表示    ”Hello World!”
 
-LCDの表示    ”Hello World!”
-
-2byte通信
-1byte 十字キー
-2byte サイドキー
-
-9600bps
-キーコード       0xAA
-
+●通信
+モジュール   Xbee
+通信速度    9600bps
+データサイズ  2byte
+1byte目   十字キー
+2byte目   サイドキー
+ライブラリ   MultiSerial.h
+キーコード    0xAA
+チェックコード 0x??^0x??^...
+※ライブラリでは割り込みを使っています.
+ライブラリ作成者が参考にした割り込みの関数とそれに使ったマクロ定義,変数宣言が以下に記されています.
+ライブラリを使用しない場合は参考にしてください.
+____________________________________________
+#define DATA_NUM 8+2//2byte→KEYCODEとCHECKCODE 8byte→やりとりするデータ
+#define TX_KEYCODE 0xBB//あちらのKEYCODE
+#define RX_KEYCODE 0xAA//こちらのKEYCODE
+#define KEY 0//KEYCODEは配列の最初
+#define CHECK DATA_NUM-1//CHECKCODEは配列の最後
+volatile uint8_t INdata[DATA_NUM]={0}, EXdata[DATA_NUM]={0};
+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;//配列をリセット
+    }
+    
+}
+________________________________________________________
+●ハード
 基板データは共有PCのデスクトップに乗せてあります.
\ No newline at end of file
--- a/main.cpp	Thu Sep 04 22:17:32 2014 +0000
+++ b/main.cpp	Mon Sep 08 02:39:40 2014 +0000
@@ -15,7 +15,6 @@
 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();
 
@@ -40,10 +39,16 @@
     while(1) {
         
         YLED=!Toggle;
+        if(Toggle){
+            
+            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[1] = LinkBit(0, 0, 0, 0, !SideKey[INDEX][LEFT], !SideKey[MIDDLE][LEFT], !SideKey[INDEX][RIGHT], !SideKey[MIDDLE][RIGHT]);
+        }else{
+            
+            EXdata[0] = EXdata[1] = 0x00;
+        }
         
-        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[1] = LinkBit(0, 0, 0, 0, !SideKey[INDEX][LEFT], !SideKey[MIDDLE][LEFT], !SideKey[INDEX][RIGHT], !SideKey[MIDDLE][RIGHT]);
     }
 }
 
@@ -71,9 +76,6 @@
     
     flick.attach(illumination, INTERVAL);
 }
-bool GetBit(uint8_t n, uint8_t bit){//整数nのbitビット目は1か0か.
-    return (n>>(bit-1))%2;
-}
 uint8_t LinkBit(bool eight, bool seven, bool six, bool five, bool fore, bool three, bool two, bool one){//0と1を集めて整数を作る
     return 0x80*eight + 0x40*seven + 0x20*six + 0x10*five + 0x08*fore + 0x04*three + 0x02*two + 0x01*one;
 }