受け取りのコントローラのプログラム
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のデスクトップに乗せてあります.