Main Program
Dependencies: mbed AQM1602 HMC6352 PID
txrx.cpp@0:d8798c19e371, 2015-09-14 (annotated)
- Committer:
- lilac0112_1
- Date:
- Mon Sep 14 06:51:40 2015 +0000
- Revision:
- 0:d8798c19e371
- Child:
- 1:f2633c150301
succeeded in compile
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lilac0112_1 | 0:d8798c19e371 | 1 | #include "mbed.h" |
lilac0112_1 | 0:d8798c19e371 | 2 | //#include "main.h" |
lilac0112_1 | 0:d8798c19e371 | 3 | //#include "txrx.h" |
lilac0112_1 | 0:d8798c19e371 | 4 | #define DATA_NUM 8+2//2byte→KEYCODE(拝啓)とCHECKCODE(敬具) 8byte→やりとりするデータ |
lilac0112_1 | 0:d8798c19e371 | 5 | #define TX_KEYCODE 0xAA//あちらのKEYCODE |
lilac0112_1 | 0:d8798c19e371 | 6 | #define RX_KEYCODE 0xAA//こちらのKEYCODE |
lilac0112_1 | 0:d8798c19e371 | 7 | #define KEY 0//KEYCODEは配列の最初 |
lilac0112_1 | 0:d8798c19e371 | 8 | #define CHECK DATA_NUM-1//CHECKCODEは配列の最後 |
lilac0112_1 | 0:d8798c19e371 | 9 | |
lilac0112_1 | 0:d8798c19e371 | 10 | extern volatile uint8_t INdata[DATA_NUM], EXdata[DATA_NUM]; |
lilac0112_1 | 0:d8798c19e371 | 11 | extern BusOut LED; |
lilac0112_1 | 0:d8798c19e371 | 12 | extern Serial pc; |
lilac0112_1 | 0:d8798c19e371 | 13 | extern Serial Xbee; |
lilac0112_1 | 0:d8798c19e371 | 14 | extern Timer t; |
lilac0112_1 | 0:d8798c19e371 | 15 | extern Ticker Stp; |
lilac0112_1 | 0:d8798c19e371 | 16 | |
lilac0112_1 | 0:d8798c19e371 | 17 | void cls() { |
lilac0112_1 | 0:d8798c19e371 | 18 | for(int i=0;i<DATA_NUM;i++) INdata[i]=0; |
lilac0112_1 | 0:d8798c19e371 | 19 | } |
lilac0112_1 | 0:d8798c19e371 | 20 | void TX(void){//送信バッファ空き割り込み用関数 |
lilac0112_1 | 0:d8798c19e371 | 21 | |
lilac0112_1 | 0:d8798c19e371 | 22 | static uint8_t Tx=DATA_NUM, i; |
lilac0112_1 | 0:d8798c19e371 | 23 | static uint8_t TXdata[DATA_NUM]={TX_KEYCODE}; |
lilac0112_1 | 0:d8798c19e371 | 24 | static uint8_t TXcheckcode=0; |
lilac0112_1 | 0:d8798c19e371 | 25 | |
lilac0112_1 | 0:d8798c19e371 | 26 | if(Tx >= DATA_NUM){ |
lilac0112_1 | 0:d8798c19e371 | 27 | |
lilac0112_1 | 0:d8798c19e371 | 28 | TXdata[KEY] = TX_KEYCODE;//Hello. |
lilac0112_1 | 0:d8798c19e371 | 29 | |
lilac0112_1 | 0:d8798c19e371 | 30 | TXdata[1] = EXdata[1]; |
lilac0112_1 | 0:d8798c19e371 | 31 | TXdata[2] = EXdata[2]; |
lilac0112_1 | 0:d8798c19e371 | 32 | TXdata[3] = EXdata[3]; |
lilac0112_1 | 0:d8798c19e371 | 33 | TXdata[4] = EXdata[4]; |
lilac0112_1 | 0:d8798c19e371 | 34 | TXdata[5] = EXdata[5]; |
lilac0112_1 | 0:d8798c19e371 | 35 | TXdata[6] = EXdata[6]; |
lilac0112_1 | 0:d8798c19e371 | 36 | TXdata[7] = EXdata[7]; |
lilac0112_1 | 0:d8798c19e371 | 37 | TXdata[8] = EXdata[8]; |
lilac0112_1 | 0:d8798c19e371 | 38 | //送信するデータ = メインで処理されたデータ |
lilac0112_1 | 0:d8798c19e371 | 39 | |
lilac0112_1 | 0:d8798c19e371 | 40 | for(i=KEY+1, TXcheckcode=0; i<CHECK; i++){//CHECKCODEの生成 |
lilac0112_1 | 0:d8798c19e371 | 41 | TXcheckcode ^= TXdata[i]; |
lilac0112_1 | 0:d8798c19e371 | 42 | } |
lilac0112_1 | 0:d8798c19e371 | 43 | |
lilac0112_1 | 0:d8798c19e371 | 44 | TXdata[CHECK] = TXcheckcode;//Good bye. |
lilac0112_1 | 0:d8798c19e371 | 45 | Tx=0;//配列をリセット |
lilac0112_1 | 0:d8798c19e371 | 46 | |
lilac0112_1 | 0:d8798c19e371 | 47 | } |
lilac0112_1 | 0:d8798c19e371 | 48 | Xbee.putc(TXdata[Tx]);//データを送信する |
lilac0112_1 | 0:d8798c19e371 | 49 | Tx++;//配列を入れ替える |
lilac0112_1 | 0:d8798c19e371 | 50 | |
lilac0112_1 | 0:d8798c19e371 | 51 | } |
lilac0112_1 | 0:d8798c19e371 | 52 | void RX(void){//受信割り込み用関数 |
lilac0112_1 | 0:d8798c19e371 | 53 | |
lilac0112_1 | 0:d8798c19e371 | 54 | static uint8_t Rx=0, i; |
lilac0112_1 | 0:d8798c19e371 | 55 | static uint8_t RXdata[DATA_NUM]={RX_KEYCODE}; |
lilac0112_1 | 0:d8798c19e371 | 56 | static uint8_t RXcheckcode=0; |
lilac0112_1 | 0:d8798c19e371 | 57 | |
lilac0112_1 | 0:d8798c19e371 | 58 | RXdata[Rx] = Xbee.getc();//データを受け取る |
lilac0112_1 | 0:d8798c19e371 | 59 | |
lilac0112_1 | 0:d8798c19e371 | 60 | if(RXdata[KEY]==RX_KEYCODE){//KEYCODEが一致したら配列を入れ替える |
lilac0112_1 | 0:d8798c19e371 | 61 | Rx++; |
lilac0112_1 | 0:d8798c19e371 | 62 | } |
lilac0112_1 | 0:d8798c19e371 | 63 | |
lilac0112_1 | 0:d8798c19e371 | 64 | if(Rx==CHECK){//CHECKCODEの生成 |
lilac0112_1 | 0:d8798c19e371 | 65 | for(i=KEY+1, RXcheckcode=0; i<CHECK; i++){ |
lilac0112_1 | 0:d8798c19e371 | 66 | RXcheckcode ^= RXdata[i]; |
lilac0112_1 | 0:d8798c19e371 | 67 | } |
lilac0112_1 | 0:d8798c19e371 | 68 | } |
lilac0112_1 | 0:d8798c19e371 | 69 | |
lilac0112_1 | 0:d8798c19e371 | 70 | if(Rx >= DATA_NUM){ |
lilac0112_1 | 0:d8798c19e371 | 71 | if(RXdata[CHECK]==RXcheckcode){//CHECKCODEが合致したらデータを適用する |
lilac0112_1 | 0:d8798c19e371 | 72 | |
lilac0112_1 | 0:d8798c19e371 | 73 | Stp.attach(&cls, .5); |
lilac0112_1 | 0:d8798c19e371 | 74 | INdata[1] = RXdata[1]; |
lilac0112_1 | 0:d8798c19e371 | 75 | INdata[2] = RXdata[2]; |
lilac0112_1 | 0:d8798c19e371 | 76 | INdata[3] = RXdata[3]; |
lilac0112_1 | 0:d8798c19e371 | 77 | INdata[4] = RXdata[4]; |
lilac0112_1 | 0:d8798c19e371 | 78 | INdata[5] = RXdata[5]; |
lilac0112_1 | 0:d8798c19e371 | 79 | INdata[6] = RXdata[6]; |
lilac0112_1 | 0:d8798c19e371 | 80 | INdata[7] = RXdata[7]; |
lilac0112_1 | 0:d8798c19e371 | 81 | INdata[8] = RXdata[8]; |
lilac0112_1 | 0:d8798c19e371 | 82 | //メインで処理されるデータ = 受け取ったデータ |
lilac0112_1 | 0:d8798c19e371 | 83 | |
lilac0112_1 | 0:d8798c19e371 | 84 | } |
lilac0112_1 | 0:d8798c19e371 | 85 | Rx=0;//配列をリセット |
lilac0112_1 | 0:d8798c19e371 | 86 | } |
lilac0112_1 | 0:d8798c19e371 | 87 | |
lilac0112_1 | 0:d8798c19e371 | 88 | } |