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

Dependencies:   TextLCD mbed MultiSerial Pswitch_Lib

Revision:
7:8c15316bdba6
Parent:
6:08b5c5bdace9
Child:
8:b43fbaf46e0e
Child:
9:39d3392a9587
--- a/main.cpp	Thu Sep 25 10:28:28 2014 +0000
+++ b/main.cpp	Fri Sep 26 08:20:41 2014 +0000
@@ -1,17 +1,24 @@
 #include "mbed.h"
 #include "TextLCD.h"
 #include "MultiSerial.h"
-
+ 
+/*
+strategy
+1 ソフトリセット
+2 最初の通信に割り込みを使わない
+3 MODSERIAL.hを使う
+4 __disable_irq();を使う
+*/
 #define DATA_NUM 2
 #define LINKCODE 0xCC
 #define LINK_INTERVAL 100
 #define KEYCODE 0xAA
-/*#define INTERVAL .5 //12
+#define INTERVAL .5 //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};*/
+enum COLOR{YELLOW=0, RED, GREEN, BLUE};
 
 uint8_t TXdata[DATA_NUM]={0};
 uint8_t RXdata[DATA_NUM]={0};
@@ -19,59 +26,65 @@
 uint8_t INdata[DATA_NUM]={0};
 uint8_t EXdata[DATA_NUM]={0};
 
-//volatile uint8_t count=0;
-//bool SW;
+volatile uint8_t count=0;
+bool SW;
 bool GAT=1;
 
-//void SetUp();
+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 flick;
-BusOut LED(LED1, LED2, LED3, LED4);
+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);
+
 DigitalOut YLED(p6);
 
-//DigitalIn CrossKey[4][2]={{p8, p30}, {p11, p29}, {p15, p28}, {p16, p27}};//p7, p12=reserve
-//DigitalIn SideKey[2][2]={{p17, p20}, {p18, p19}};
+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);
+Serial pc(USBTX,USBRX);
 
 
 int main()
 {
-    //SetUp();
     
-    Toggle.mode(PullUp);
+    SetUp();
+    
     TAX.attach(GiveAndTake, 0.1);
-    while(1);
-    connect_check();
+    Toggle.mode(PullUp);
     
-    //TextLCD lcd(p26, p25, p24, p23, p22, p21, TextLCD::LCD16x2); // rs, e, d4-d7
+    while(1){
+        if(RXdata[0]==LINKCODE) break;
+    }
+    Xbee.stop_read();
     
-    //if(TXdata[0]==LINKCODE) lcd.cls(), lcd.printf("3SecondsLater,\n YouCanRun");
+    //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;
+    SW = Toggle;
     
     Xbee.start_write();
     Xbee.write_data(EXdata, KEYCODE);
     
     while(1) {
         
-        //YLED=!Toggle;
+        YLED=!Toggle;
         
-        //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(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){
             
             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]);
@@ -79,13 +92,13 @@
         }else{
             
             EXdata[0] = EXdata[1] = 0x00;
-        }*/
+        }
         
     }
     
 }
 
-/*void SetUp(void){
+void SetUp(void){
     
     CrossKey[NORTH][RIGHT].mode(PullUp);
     CrossKey[EAST][RIGHT].mode(PullUp);
@@ -103,82 +116,67 @@
     
     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();
         
-        LED = 3;
-        
-        //wait_ms(100);
         if(RXdata[0]==LINKCODE) break;
-        while(INdata[0]!=LINKCODE) YLED = !Toggle;
+        
+        NVIC_SystemReset();
+    
+    }
         
-        while(INdata[0]!=LINKCODE) YLED = !Toggle;
-        */
-        
-        /*YLED = !Toggle;
+}
+void GiveAndTake(){
+    
+    if(GAT){
+        YLED = !Toggle;
         LED = 12;
-        Xbee.start_write();
-        TXdata[0]=LINKCODE;
-        Xbee.write_data(TXdata,KEYCODE);
-        //wait_ms(100);
-        Xbee.stop_write();
-        Xbee.start_read();
-        
-        Xbee.read_data(RXdata,KEYCODE);
-        LED = 3;
-        wait_ms(100);
-        if(RXdata[0]==LINKCODE) break;
         
         Xbee.stop_read();
         
-        //continue;
-        while(INdata[0]!=LINKCODE) YLED = !Toggle;
-        while(INdata[0]!=LINKCODE) YLED = !Toggle;*/
-        
-    }
-    
-}
-void GiveAndTake(){
-    if(GAT){
-        YLED = !Toggle;
-        LED = 12;
+        TXdata[0]=LINKCODE;
         Xbee.start_write();
-        TXdata[0]=LINKCODE;
         Xbee.write_data(TXdata,KEYCODE);
-        //wait_us(100);
-        Xbee.stop_write();
     }
     else{
         YLED = !Toggle;
-        Xbee.start_read();
         
-        Xbee.read_data(RXdata,KEYCODE);
+        Xbee.stop_write();
+        
+        Xbee.start_read();
         LED = 3;
+        Xbee.read_data(RXdata,KEYCODE);
+    
         wait_ms(100);
+
         if(RXdata[0]==LINKCODE) TAX.detach();
-        
-        Xbee.stop_read();
+        NVIC_SystemReset();
     }
     GAT = !GAT;
 }
-/*uint8_t LinkBit(bool eight, bool seven, bool six, bool five, bool fore, bool three, bool two, bool one){//0と1を集めて整数を作る
+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;
 }
 void illumination(void){//literally
     count++;
     LED = count;
-}*/
\ No newline at end of file
+}
\ No newline at end of file