Team pumpkin pie. Tokai Univ., MicroMouse

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "i2clcd.hpp"
00003 #include "gp2y0e.hpp"
00004 
00005 //Mode Settings (Choice ...1 else ...0)
00006 #define MenuEnable  (1)
00007 #define WriteEnable (0)
00008 #define TestEnable  (0)
00009 
00010 //#define AllTestMode //All Address test(ad:0x00 - 0xf0. Distance). Using Conputer on Console.
00011 //#define ShiftBit_Check_Enable //Check ShiftBit
00012 
00013 //!Reset Code
00014 #define RESET (NVIC_SystemReset()) //End loop go to Restart! ex( RESET;
00015 
00016 //!Pin Settings
00017 #define i2c_SDA (PB_7)
00018 #define i2c_SCL (PB_6)
00019 #define GP2Y_VPPpin (PA_12)
00020 
00021 I2C i2c(i2c_SDA,i2c_SCL);
00022 LCD lcd(i2c);
00023 GP2Y_I2C gp2y(i2c,GP2Y_VPPpin);
00024 
00025 Serial pc(USBTX,USBRX);
00026 DigitalOut led(LED1);
00027 
00028 DigitalIn SelectSW(PA_1);
00029 DigitalIn  EnterSW(PA_0);
00030 
00031 #ifndef AllTestMode
00032 int main(void)
00033 {
00034   int dis,old_dis;
00035   int TestAddress = 0x80;
00036   int WriteAddress= 0x00;
00037   bool GoWrite = 0;
00038   bool change = MenuEnable;
00039   bool MenuMode  = MenuEnable;
00040   bool WriteMode = WriteEnable;
00041   bool TestMode  = TestEnable + MenuMode;
00042 
00043   wait(2); //Serial Connect Wait...
00044   pc.printf("\n\n\nIgni...\n");
00045   lcd.locate(0,1);
00046   lcd.printf("igni...");
00047 
00048   //!MenuMode
00049   while(MenuMode)
00050   {
00051     if(change == 1)
00052     {
00053       pc.printf("Select -> ");
00054       lcd.printf("Select...");
00055       lcd.locate(0,1);
00056       if(TestMode==1)
00057       {
00058         pc.printf("TestMode");
00059         lcd.printf("TestMode");
00060       }
00061       else if(WriteMode==1)
00062       {
00063         pc.printf("AddressWrite");
00064         lcd.printf("AddWrite");
00065       }
00066       else TestMode = WriteMode = 0;
00067       pc.printf("\n");
00068       change = 0;
00069     }
00070 
00071     if(SelectSW == 0){
00072       WriteMode = TestMode;
00073       TestMode = !TestMode;
00074       if(WriteMode==0 && TestMode==0 || WriteMode==1 && TestMode == 1)
00075       {
00076         pc.printf("Sorry. Error now..._m_...\n");
00077         lcd.clear();
00078         lcd.locate(0,1);
00079         lcd.printf("Error.");
00080         TestMode=1;
00081         wait(2);
00082       }
00083       change = 1;
00084       wait(0.2);
00085     }
00086     else if(EnterSW == 0){
00087       wait(0.2);
00088       MenuMode = 0;
00089       break;
00090     }
00091     wait_ms(100);
00092   }
00093   //!MenuMode _END
00094 
00095   //!WriteMode
00096   if(WriteMode && !GoWrite)
00097   {
00098     pc.printf("\n <AddressWriteMode>\n Address Select -> SelectSwict.\n Write Select Address -> EnterSwitch.\n Cancel -> OnBoard Reset SW\n\n");
00099     change = 1;
00100     wait(1);
00101     while(1)
00102     {
00103       if(change == 1)
00104       {
00105         pc.printf("Address -> 0x%x",WriteAddress);
00106         lcd.reset();
00107         lcd.locate(0,1);
00108         lcd.printf("Ad->0x%x",WriteAddress);
00109         pc.printf("\n");
00110         change = 0;
00111       }
00112       if(SelectSW == 0)
00113       {
00114         if(WriteAddress == 0xF0) WriteAddress = 0x00;
00115         else WriteAddress += 0x10;
00116         change = 1;
00117       }
00118       else if(EnterSW == 0)
00119       {
00120         pc.printf("\n\n!WriteMode! You Select Address -> 0x%x\n Write -> EnterSW\n Cancel -> SelectSW\n" ,WriteAddress);
00121         lcd.reset();
00122         lcd.printf("OK>Enter");
00123         lcd.locate(0,1);
00124         lcd.printf("ad->0x%x" ,WriteAddress);
00125         wait(1);
00126         while(1)
00127         {
00128           wait(0.5);
00129           if(EnterSW == 0)
00130           {
00131             GoWrite = 1;
00132             break;
00133           }
00134           else if(SelectSW == 0)
00135           {
00136             wait(1);
00137             break;
00138           }
00139         }
00140       }
00141       wait_ms(100);
00142       if(GoWrite == 1) break;
00143     }
00144   }
00145   if(GoWrite)
00146   {
00147     WriteAddress = WriteAddress >> 4;
00148     pc.printf("\n\nWrite Sequence has wait 10 second.");
00149     pc.printf("\n\nLoading Write Sequence...\nYou Select Address -> 0x%x.\nConvert [WriteAddress >> 2 = SelectAd(0x%02x)]" ,WriteAddress<<4,WriteAddress);
00150     gp2y.GP2Y_ADDR_Write_Sequence(WriteAddress);
00151     wait(1);
00152     pc.printf("\n!!!Write Done!!!\n Please Hard_Reset!(Disconect Power Cable.)\n Enter for SoftReset.(Dont change address after Hard_Reset!)\n");
00153     lcd.reset();
00154     lcd.printf("Please");
00155     lcd.locate(0,1);
00156     lcd.printf("PowerOFF");
00157     while(1)
00158     {
00159       led = !led;
00160       if(EnterSW == 0) RESET;
00161       wait(1);
00162     }
00163   }
00164   //!WriteMode _END
00165 
00166   //!TestMode
00167   if(TestMode) pc.printf("\n <TestMode>\n ReBoot -> Please Push EnterSwitch.\n Test Address Change -> Push SelectSwitch.\n\n");
00168   while(TestMode)
00169   {
00170     dis = gp2y.Distance(TestAddress);
00171     if(old_dis != dis || change == 1)
00172     {
00173       lcd.reset();
00174       pc.printf("%2x -> %4d\n" ,TestAddress,dis);
00175       lcd.locate(0,1);
00176       lcd.printf("%2x->%4d" ,TestAddress,dis);
00177       change = 0;
00178     }
00179     old_dis = dis;
00180     if(SelectSW == 0)
00181     {
00182       if(TestAddress == 0xF0)TestAddress = 0x00;
00183       else TestAddress += 0x10;
00184       change = 1;
00185     }
00186     else if(EnterSW == 0) RESET;
00187     wait_ms(100);
00188   }
00189   //!TestMode _END
00190 
00191   //!ProgramEnd_AutoReset
00192   pc.printf("\n\n !Warning! Program End. Rebooting to after 5 sec...\n\n");
00193   lcd.clear();
00194   lcd.locate(0,1);
00195   lcd.printf("Res5Sec");
00196   wait(5);
00197   //NVIC_SystemReset();
00198   RESET;
00199   //!ProgramEnd_AutoReset _END
00200 }
00201 #endif
00202 
00203 #ifdef AllTestMode
00204 int main(void)
00205 {
00206   int dis,a=0x00;
00207   wait(5);
00208   pc.printf("!!!Warning!!! This Mode Is Test Only. Not Main Function!\n");
00209   while(1)
00210   {
00211     pc.printf("\n\n");
00212     for(a=0x00;a<=0xF0;a+=0x10) pc.printf("|0x%2x" ,a);
00213     pc.printf("|\n");
00214     for(a=0x00;a<=0xF0;a+=0x10)
00215     {
00216       dis = gp2y.Distance(a);
00217       pc.printf("|%4d" ,dis);
00218       //if(a==0xf0) a=0xff;
00219     }
00220     #ifdef ShiftBit_Check_Enable
00221     pc.printf("|\n");
00222     for(a=0x00;a<=0xF0;a+=0x10)
00223     {
00224       pc.printf("|%4d" ,gp2y.ShiftBit_Check(a));
00225       //if(a==0xf0) a=0xff;
00226     }
00227     #endif
00228     pc.printf("|");
00229     wait_ms(500);
00230   }
00231 }
00232 #endif