
受け取りのコントローラのプログラム
Dependencies: TextLCD mbed MultiSerial Pswitch_Lib
Revision 1:84625a611c5f, committed 2014-09-04
- Comitter:
- lilac0112_1
- Date:
- Thu Sep 04 01:58:58 2014 +0000
- Parent:
- 0:d3702a4e32ea
- Child:
- 2:7820849bf534
- Commit message:
- MultiSerial??
Changed in this revision
MultiSerial.lib | 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/MultiSerial.lib Thu Sep 04 01:58:58 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/teams/B/code/MultiSerial/#ce09c92e33b4
--- 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