Team pumpkin pie. Tokai Univ., MicroMouse
Embed:
(wiki syntax)
Show/hide line numbers
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
Generated on Mon Oct 28 2024 09:21:32 by
1.7.2