an ultrasonic sensor used as a car sensor
Dependencies: N5110 PowerControl beep mbed sensor
main.cpp
00001 /** 00002 @file main.cpp 00003 00004 @brief Program implementation 00005 00006 */ 00007 00008 #include "main.h" 00009 00010 00011 00012 int main () 00013 { 00014 00015 00016 PHY_PowerDown(); /// the Ethernet cable is powered down 00017 lcd.init(); /// the LCD display is initialised when switch is on 00018 welcomeMessage(); /// the welcome message will appear 00019 button.rise(&buttonPressed); /// event generated on rising edge 00020 00021 00022 while (1) { 00023 00024 mypotVal = mypot; ///sets a variable to change as the pot is changing 00025 lcd.setBrightness(mypotVal ); ///sets the brightness to the pot value 00026 compDist(); ///compares the distance to set it in a specific range 00027 00028 00029 } 00030 00031 00032 } 00033 00034 void buttonPressed() 00035 { 00036 wait(0.2); 00037 00038 if (i>1) ///when button is pressed it will check if i >1 00039 { i=0; /// if it is it will set it to 0 00040 } 00041 else 00042 { i++; /// if not it will increment i by one 00043 } 00044 00045 } 00046 00047 00048 00049 ///Print welcome message 00050 void welcomeMessage() 00051 { 00052 00053 00054 lcd.printString("University of ",5,0); 00055 lcd.printString("Leeds",27,1); 00056 00057 lcd.refresh(); 00058 00059 lcd.drawRect(59,36,5,11,0);///bottom left rectangle is set 00060 lcd.drawRect(72,36,5,11,0);///bottom right rectangle is set 00061 lcd.drawRect(64,34,8,13,0);///bottom middle rectangle is set 00062 00063 lcd.drawRect(60,33,16,3,0); /// is set over the bottom rectangles 00064 00065 lcd.drawCircle(68,40,2,0); /// circle is set on bottom middle box 00066 00067 lcd.drawRect(61,26,14,7,0);///big middle box is set over everything 00068 00069 lcd.drawRect(63,27,10,0.5,1);///top black rectangle is set 00070 00071 lcd.drawRect(64.5,28,1,0.5,1);///left middle black rect is set 00072 lcd.drawRect(67.5,28,1,0.5,1);///middle black rect is set 00073 lcd.drawRect(70,28,1,0.5,1);///right middle black rect is set 00074 lcd.drawRect(64.5,28,0.5,3.5,1);///left bottom black rect is set 00075 lcd.drawRect(67.5,28,0.5,3.5,1);///middle bottom black rect is set 00076 lcd.drawRect(70,28,0.5,3.5,1);///right bottom black rect is set 00077 00078 lcd.drawRect(62,21,12,5,0);///rectangle is set over big middle box 00079 00080 lcd.drawRect(66,22,0.5,0.5,1);///left top black rect is set 00081 lcd.drawRect(68,22,0.5,0.5,1);///top black rect is set 00082 lcd.drawRect(70,22,0.5,0.5,1);///right top black rect is set 00083 lcd.drawRect(66,22,0.5,2,1);///left bottom black rect is set 00084 lcd.drawRect(68,22,0.5,2,1);///middle bottom black rect is set 00085 lcd.drawRect(70,22,0.5,2,1);///right bottom black rect is set 00086 00087 lcd.drawRect(64,17,8,4,0);///rectangle under triangle is set 00088 00089 lcd.drawLine(64,17,68,13.5,1);///left line to complete triangle 00090 00091 lcd.drawLine(72,17,68,13.5,1);///right line to complete triangle 00092 00093 00094 00095 lcd.clearPixel(65, 36); ///clears intersecting lines from rectangle 00096 lcd.clearPixel(66, 36); 00097 lcd.clearPixel(67, 36); 00098 lcd.clearPixel(68, 36); 00099 lcd.clearPixel(69, 36); 00100 lcd.clearPixel(70, 36); 00101 lcd.clearPixel(71, 36); 00102 00103 lcd.refresh(); 00104 00105 00106 00107 wait(3.0); 00108 lcd.clear(); 00109 00110 00111 00112 lcd.printString("Saleh Jaffal",8,2); 00113 lcd.printString("200911007",15,3); 00114 00115 lcd.refresh(); 00116 00117 lcd.drawRect(6,12,73,21,0); 00118 lcd.drawRect(4,10,77,25,0); 00119 00120 lcd.refresh(); 00121 00122 00123 00124 getDistanceCm(); ///gets the distance after the message 00125 getDistanceIn(); 00126 getDistanceUs(); 00127 00128 00129 00130 } 00131 00132 void getDistanceCm() 00133 { 00134 00135 distance1 = sensor.getDistanceCm(); ///adds up 10 distances read by the sensor 00136 distance2 = sensor.getDistanceCm(); ///there is a 70 ms delay between each reading 00137 distance3 = sensor.getDistanceCm(); 00138 distance4 = sensor.getDistanceCm(); 00139 distance5 = sensor.getDistanceCm(); 00140 distance6 = sensor.getDistanceCm(); 00141 distance7 = sensor.getDistanceCm(); 00142 distance8 = sensor.getDistanceCm(); 00143 distance9 = sensor.getDistanceCm(); 00144 distance10 = sensor.getDistanceCm(); 00145 00146 sum = distance1+distance2 +distance3 +distance4 +distance5 +distance6 +distance7 +distance8 +distance9 +distance10 ; 00147 ///all of them are added to the sum 00148 00149 distanceCm = sum /10; ///the sum is divided by 10 to get the average 00150 } 00151 00152 00153 00154 00155 00156 00157 00158 void getDistanceIn() 00159 { 00160 distance1 = sensor.getDistanceIn(); ///adds up 10 distances read by the sensor 00161 distance2 = sensor.getDistanceIn(); ///there is a 70 ms delay between each reading 00162 distance3 = sensor.getDistanceIn(); 00163 distance4 = sensor.getDistanceIn(); 00164 distance5 = sensor.getDistanceIn(); 00165 distance6 = sensor.getDistanceIn(); 00166 distance7 = sensor.getDistanceIn(); 00167 distance8 = sensor.getDistanceIn(); 00168 distance9 = sensor.getDistanceIn(); 00169 distance10 = sensor.getDistanceIn(); 00170 00171 00172 sum = distance1+distance2 +distance3 +distance4 +distance5 +distance6 +distance7 +distance8 +distance9 +distance10 ; 00173 ///all of them are added to the sum 00174 00175 distanceIn = sum /10; ///the sum is divided by 10 to get the average 00176 } 00177 00178 00179 00180 void getDistanceUs() 00181 { 00182 distance1 = sensor.getDistanceUs(); ///adds up 10 distances read by the sensor 00183 distance2 = sensor.getDistanceUs(); ///there is a 70 ms delay between each reading 00184 distance3 = sensor.getDistanceUs(); 00185 distance4 = sensor.getDistanceUs(); 00186 distance5 = sensor.getDistanceUs(); 00187 distance6 = sensor.getDistanceUs(); 00188 distance7 = sensor.getDistanceUs(); 00189 distance8 = sensor.getDistanceUs(); 00190 distance9 = sensor.getDistanceUs(); 00191 distance10 = sensor.getDistanceUs(); 00192 00193 00194 sum = distance1+distance2 +distance3 +distance4 +distance5 +distance6 +distance7 +distance8 +distance9 +distance10 ; 00195 ///all of them are added to the sum 00196 00197 distanceUs = sum /10; ///the sum is divided by 10 to get the average 00198 00199 00200 } 00201 00202 void compDist() ///used to compare the distances 00203 { 00204 00205 switch (i) 00206 { 00207 00208 case 0: 00209 { 00210 getDistanceCm(); 00211 ///calls this action to show the reading 00212 char buffer[14]; 00213 /// each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) 00214 int length = sprintf(buffer," %d cm",distanceCm ); 00215 /// print formatted data to buffer 00216 if(length<=14); 00217 /// if string will fit on display 00218 00219 lcd.clear(); /// clears LCD 00220 lcd.drawRect(6,12,73,21,0);///sets 2 rectangles 00221 lcd.drawRect(4,10,77,25,0); 00222 lcd.printString("Distance =",8,2);///prints distance and the reading below it 00223 lcd.printString(buffer,8,3); 00224 00225 lcd.refresh(); ///refreshes LCD screen 00226 00227 00228 00229 ///compares distances and sets them in their specified range 00230 if (distanceCm >= 100) { 00231 A =0; ///sets case 00232 distanceA(); 00233 } 00234 else if (distanceCm >= 80 && distanceCm <= 99) { 00235 A =1; ///sets case 00236 distanceA(); 00237 } 00238 else if (distanceCm >= 60 && distanceCm <= 79) { 00239 A =2; ///sets case 00240 distanceA(); 00241 } 00242 else if (distanceCm >= 40 && distanceCm <= 59) { 00243 A =3; ///sets case 00244 distanceA(); 00245 } 00246 else if (distanceCm >= 20 && distanceCm <=39 ) { 00247 A =4; ///sets case 00248 distanceA(); 00249 } 00250 else { 00251 A =5; ///sets case 00252 distanceA(); 00253 } 00254 00255 } 00256 break; 00257 00258 case (1): 00259 { 00260 00261 getDistanceIn(); 00262 ///calls this action to show the reading 00263 char buffer[14]; 00264 /// each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) 00265 int length = sprintf(buffer," %d in",distanceIn ); 00266 /// print formatted data to buffer 00267 if(length<=14); 00268 /// if string will fit on display 00269 00270 lcd.clear(); /// clears LCD 00271 lcd.drawRect(6,12,73,21,0);/// sets 2 rectangles 00272 lcd.drawRect(4,10,77,25,0); 00273 lcd.printString("Distance =",8,2);/// prints distance and the reading below it 00274 lcd.printString(buffer,8,3); 00275 00276 lcd.refresh(); /// refreshes LCD screen 00277 00278 ///compares distances and sets them in their specified range 00279 00280 if (distanceIn >= 40) { 00281 A =0; ///sets case 00282 distanceA(); 00283 } 00284 else if (distanceIn >= 32 && distanceIn <= 39) { 00285 A =1; ///sets case 00286 distanceA(); 00287 } 00288 else if (distanceIn >= 24 && distanceIn <= 31) { 00289 A =2; ///sets case 00290 distanceA(); 00291 } 00292 else if (distanceIn >= 16 && distanceIn <= 23) { 00293 A =3; ///sets case 00294 distanceA(); 00295 } 00296 else if (distanceIn >= 8 && distanceIn <=15 ) { 00297 A =4; ///sets case 00298 distanceA(); 00299 } 00300 else { 00301 A =5; ///sets case 00302 distanceA(); 00303 } 00304 } 00305 break; 00306 00307 case(2): 00308 { 00309 getDistanceUs(); 00310 ///calls this action to show the reading 00311 char buffer[14]; 00312 /// each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) 00313 int length = sprintf(buffer," %d us",distanceUs ); 00314 /// print formatted data to buffer 00315 if(length<=14); 00316 /// if string will fit on display 00317 00318 lcd.clear(); /// clears LCD 00319 lcd.drawRect(6,12,73,21,0);/// sets 2 rectangles 00320 lcd.drawRect(4,10,77,25,0); 00321 lcd.printString("Distance =",8,2);/// prints distance and the reading below it 00322 lcd.printString(buffer,8,3); 00323 00324 lcd.refresh(); /// refreshes LCD screen 00325 00326 00327 ///compares distances and sets them in their specified range 00328 00329 if (distanceUs >= 5900) { 00330 A =0; ///sets case 00331 distanceA(); 00332 } 00333 else if (distanceUs >= 4680 && distanceUs <= 5899) { 00334 A =1;///sets case 00335 distanceA(); 00336 } 00337 else if (distanceUs >= 3400 && distanceUs <= 4679) { 00338 A =2;///sets case 00339 distanceA(); 00340 } 00341 else if (distanceUs >= 2430 && distanceUs <= 3339) { 00342 A =3;///sets case 00343 distanceA(); 00344 } 00345 else if (distanceUs >= 1220 && distanceUs <=2429 ) { 00346 A =4;///sets case 00347 distanceA(); 00348 } 00349 else { 00350 A =5;///sets case 00351 distanceA(); 00352 } 00353 00354 } 00355 break; 00356 00357 00358 00359 } 00360 } 00361 00362 void distanceA() //sets leds and buzzer for each case 00363 { 00364 switch (A ){ 00365 00366 case(0): 00367 { //case 0 would have 1 LED on 00368 green1=1; 00369 green2=0; 00370 yellow1=0; 00371 yellow2=0; 00372 red1=0; 00373 red2=0; 00374 lcd.printString("Out of range",0,0); 00375 buzzer.beep(2000, 0.1); ///@see This code was from a library I found 00376 00377 00378 } 00379 break; 00380 00381 case(1): 00382 { ///case 1 would have 2 LED's on 00383 green1=1; 00384 green2=1; 00385 yellow1=0; 00386 yellow2=0; 00387 red1=0; 00388 red2=0; 00389 lcd.printString("In range",0,0); 00390 buzzer.beep(2000, 0.1); ///@see This code was from a library I found 00391 } 00392 break; 00393 00394 case(2): 00395 { //green1=1; ///case 2 would have 3 LED's on 00396 green2=1; 00397 yellow1=1; 00398 yellow2=0; 00399 red1=0; 00400 red2=0; 00401 lcd.printString("Take Care!",0,0); 00402 buzzer.beep(2000, 0.2); 00403 } 00404 break; 00405 00406 case(3): 00407 { 00408 green1=1; ///case 3 would have 4 LED's on 00409 green2=1; 00410 yellow1=1; 00411 yellow2=1; 00412 red1=0; 00413 red2=0; 00414 lcd.printString("Closer!",0,0); 00415 buzzer.beep(2000, 0.2); ///@see This code was from a library I found 00416 } 00417 break; 00418 00419 case(4): 00420 { 00421 green1=1; ///case 4 would have 5 LED's on 00422 green2=1; 00423 yellow1=1; 00424 yellow2=1; 00425 red1=1; 00426 red2=0; 00427 lcd.printString("VERY CLOSE!",0,0); 00428 buzzer.beep(2000, 0.4); ///@see This code was from a library I found 00429 } 00430 break; 00431 00432 case(5): 00433 { 00434 green1=1; ///case 5 would have 6 LED's on 00435 green2=1; 00436 yellow1=1; 00437 yellow2=1; 00438 red1=1; 00439 red2=1; 00440 lcd.printString("WATCH OUT!",0,0); 00441 buzzer.beep(2000, 1.2); ///@see This code was from a library I found 00442 } 00443 break; 00444 }}
Generated on Mon Jul 25 2022 18:37:11 by 1.7.2