an ultrasonic sensor used as a car sensor

Dependencies:   N5110 PowerControl beep mbed sensor

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

Go to the documentation of this file.
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 }}