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

Dependencies:   TextLCD mbed MultiSerial Pswitch_Lib

ReadMe.txt

Committer:
lilac0112_1
Date:
2014-10-16
Revision:
10:8b49bbf4c0c9
Parent:
3:cfd7cd361088

File content as of revision 10:8b49bbf4c0c9:

仕様書
●マイコンのピンの使用状況
ピン  接続先             備考
p4  プッシュスイッチ    リセットボタン
p5  トグルスイッチ     
p6  黄色LED
p7  右十字キー           予約
p8  右十字キー           黄
p9  スライドスイッチ>Xbee   送信
p10 スライドスイッチ>Xbee   受信
p11 右十字キー           赤
p12 右十字キー           予約
p13 スライドスイッチ>Xbee   送信
p14 スライドスイッチ>Xbee   受信
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 左十字キー           青
p28 左十字キー           緑
p29 左十字キー           赤
p30 左十字キー           黄

●LCDの表示    ”Hello World!”

●通信
モジュール   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のデスクトップに乗せてあります.