受け取りのコントローラのプログラム
Dependencies: TextLCD mbed MultiSerial Pswitch_Lib
Diff: main.cpp
- Revision:
- 9:39d3392a9587
- Parent:
- 7:8c15316bdba6
- Child:
- 10:8b49bbf4c0c9
--- a/main.cpp Fri Sep 26 08:20:41 2014 +0000 +++ b/main.cpp Sat Oct 04 02:28:38 2014 +0000 @@ -1,43 +1,26 @@ #include "mbed.h" #include "TextLCD.h" #include "MultiSerial.h" - -/* -strategy -1 ソフトリセット -2 最初の通信に割り込みを使わない -3 MODSERIAL.hを使う -4 __disable_irq();を使う -*/ +#include "Pswitch.h" + #define DATA_NUM 2 -#define LINKCODE 0xCC -#define LINK_INTERVAL 100 #define KEYCODE 0xAA -#define INTERVAL .5 //12 +#define INTERVAL 12 enum HAND{RIGHT=0, LEFT}; enum FINGER{INDEX=0, MIDDLE}; enum COMPASS{NORTH=0, EAST, SOUTH, WEST}; enum COLOR{YELLOW=0, RED, GREEN, BLUE}; -uint8_t TXdata[DATA_NUM]={0}; -uint8_t RXdata[DATA_NUM]={0}; - -uint8_t INdata[DATA_NUM]={0}; -uint8_t EXdata[DATA_NUM]={0}; - -volatile uint8_t count=0; +uint8_t INdata[DATA_NUM]={0}, EXdata[DATA_NUM]={0}; +uint8_t count=0; +//uint8_t watch; bool SW; -bool GAT=1; void SetUp(); -void connect_check(); -void GiveAndTake(); uint8_t LinkBit(bool eight, bool seven, bool six, bool five, bool fore, bool three, bool two, bool one); void illumination(); -Ticker TAX; - Ticker flick; BusOut LED(LED1, LED2, LED3, LED4); @@ -46,45 +29,29 @@ DigitalIn CrossKey[4][2]={{p8, p30}, {p11, p29}, {p15, p28}, {p16, p27}};//p7, p12=reserve DigitalIn SideKey[2][2]={{p17, p20}, {p18, p19}}; DigitalIn Toggle(p5); - -MultiSerial Xbee(p9, p10); -Serial pc(USBTX,USBRX); +//Pswitch Toggle(p5); +MultiSerial Xbee(p9, p10, write);//or p13, p14 +Serial pc(USBTX, USBRX); -int main() -{ +TextLCD lcd(p26, p25, p24, p23, p22, p21, TextLCD::LCD16x2); // rs, e, d4-d7 + +int main() { SetUp(); - TAX.attach(GiveAndTake, 0.1); - Toggle.mode(PullUp); - - while(1){ - if(RXdata[0]==LINKCODE) break; - } - Xbee.stop_read(); - - //connect_check(); - - TextLCD lcd(p26, p25, p24, p23, p22, p21, TextLCD::LCD16x2); // rs, e, d4-d7 - - if(TXdata[0]==LINKCODE) lcd.cls(), lcd.printf("3SecondsLater,\n YouCanRun"); - - wait(3); - - SW = Toggle; - - Xbee.start_write(); Xbee.write_data(EXdata, KEYCODE); - while(1) { YLED=!Toggle; + if(Toggle){ + YLED=!Toggle.read(); + } if(YLED&&SW) lcd.cls(), lcd.printf("Pause Mode\n"), SW=0; if((!YLED)&&(!SW)) lcd.cls(), lcd.printf("Run Mode\n"), SW=1; - if(Toggle){ + if(Toggle.read()){ 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]); @@ -94,12 +61,19 @@ EXdata[0] = EXdata[1] = 0x00; } + LED = Toggle*LinkBit(0, 0, 0, 0, !SideKey[INDEX][LEFT], !SideKey[MIDDLE][LEFT], !SideKey[INDEX][RIGHT], !SideKey[MIDDLE][RIGHT]); + } - } void SetUp(void){ + + + lcd.printf("Hello World!\n"); + if(!Toggle.read()) lcd.cls(), lcd.printf("Pause Mode\n"), SW=0; + if(Toggle.read()) lcd.cls(), lcd.printf("Run Mode\n"), SW=1; + CrossKey[NORTH][RIGHT].mode(PullUp); CrossKey[EAST][RIGHT].mode(PullUp); CrossKey[WEST][RIGHT].mode(PullUp); @@ -114,64 +88,9 @@ SideKey[INDEX][LEFT].mode(PullUp); SideKey[MIDDLE][LEFT].mode(PullUp); - flick.attach(illumination, INTERVAL); - flick.detach(); -} -void connect_check(void){ - - while(1){ - - YLED = !Toggle; - LED = 12; - - Xbee.start_write(); - TXdata[0]=LINKCODE; - Xbee.write_data(TXdata,KEYCODE); - //wait_ms(100); - Xbee.stop_write(); - - LED = 3; - - Xbee.start_read(); - - Xbee.read_data(RXdata,KEYCODE); - //wait_ms(100); - Xbee.stop_read(); - - if(RXdata[0]==LINKCODE) break; - - NVIC_SystemReset(); + Toggle.mode(PullUp); - } - -} -void GiveAndTake(){ - - if(GAT){ - YLED = !Toggle; - LED = 12; - - Xbee.stop_read(); - - TXdata[0]=LINKCODE; - Xbee.start_write(); - Xbee.write_data(TXdata,KEYCODE); - } - else{ - YLED = !Toggle; - - Xbee.stop_write(); - - Xbee.start_read(); - LED = 3; - Xbee.read_data(RXdata,KEYCODE); - - wait_ms(100); - - if(RXdata[0]==LINKCODE) TAX.detach(); - NVIC_SystemReset(); - } - GAT = !GAT; + //flick.attach(illumination, INTERVAL); } 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;