ELEC2645 (2015/16) / Mbed 2 deprecated Sensor_Project

Dependencies:   N5110 SRF02 mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 
00002 #include "main.h"
00003 
00004 int main()
00005 {
00006     int distance;
00007     int lcd_message;
00008     char distance_array [14];
00009     lcd.init();  // initialise display
00010     lcd.normalMode();      // normal colour mode
00011     lcd.setBrightness(1.0); // put LED backlight on 50%
00012     for (int i=0; i < 23; i++) {
00013         lcd.drawCircle(42,24,i,0);
00014         lcd.refresh();
00015         wait(0.2);
00016     }
00017     lcd.clear();
00018     lcd.printString("Welocme to",15,1);
00019     lcd.printString ("Sensor Project",2,3);
00020     lcd.printString("Xin Zhang",0,5);
00021     wait (2.0);
00022     lcd.clear();
00023     lcd.refresh();
00024     ticker.attach(&timer_isr,0.5); //2Hz   LED flash
00025     detect.attach(&detect_isr,0.5); //2HZ  Sensor detect 
00026     while(1) {
00027 
00028         if(g_detect_timer_flag  == 1) {
00029             for(int i=0; i<=9; i++) {                     //Detect 10 times 
00030                 distanceArray [i]=sensor.getDistanceCm(); // read sensor distance in cm and print over serial port
00031             }
00032 
00033             int sum=0;                                  // Make sensor to detect 10 times and add togther in order to get mean value
00034             for(int i=0; i<=9; i++) {
00035                 sum=sum+distanceArray [i];
00036             }
00037 
00038             distance = sum/10;                          // Getting Mean vlaue
00039 
00040             lcd_message = sprintf(distance_array, "D = %d CM",distance);// short delay before next measurement
00041 
00042             lcd.printString(distance_array,5,1);
00043 
00044             int x;
00045             clearCar(xOld,40);
00046             if (distance >= 300) {                       // situation which distance is above 300
00047                 x=2;
00048                 xOld=2;
00049                 drawCar(x,40);
00050 
00051                 lcd.clearPixel(77,9);      //Delete symbol for exclamation mark
00052                 lcd.clearPixel (77,10);
00053                 lcd.clearPixel (77,11);
00054                 lcd.clearPixel (77,12);
00055                 lcd.clearPixel (77,13);
00056                 lcd.clearPixel (77,15);
00057 
00058                 lcd.clearPixel (79,9);
00059                 lcd.clearPixel (79,10);
00060                 lcd.clearPixel (79,11);
00061                 lcd.clearPixel (79,12);
00062                 lcd.clearPixel (79,13);
00063                 lcd.clearPixel (79,15);
00064 
00065                 lcd.clearPixel (75,9);
00066                 lcd.clearPixel (75,10);
00067                 lcd.clearPixel (75,11);
00068                 lcd.clearPixel (75,12);
00069                 lcd.clearPixel (75,13);
00070                 lcd.clearPixel (75,15);
00071 
00072                 buzzer.period(1.0/1000.0);      // buzzer cloesd
00073                 buzzer=0.0;
00074                 wait(0.2);
00075 
00076             } else if(distance < 300 && distance >16) {     // situation  which distance is from 16 to 300
00077                 x = 68.0-(66.0/284 * distance);
00078                 xOld = 68.0-(66.0/284 * distance);
00079                 drawCar(x,40);
00080 
00081                 lcd.clearPixel(77,9);
00082                 lcd.clearPixel (77,10);
00083                 lcd.clearPixel (77,11);
00084                 lcd.clearPixel (77,12);
00085                 lcd.clearPixel (77,13);
00086                 lcd.clearPixel (77,15);
00087 
00088                 lcd.clearPixel (79,9);
00089                 lcd.clearPixel (79,10);
00090                 lcd.clearPixel (79,11);
00091                 lcd.clearPixel (79,12);
00092                 lcd.clearPixel (79,13);
00093                 lcd.clearPixel (79,15);
00094 
00095                 lcd.clearPixel (75,9);
00096                 lcd.clearPixel (75,10);
00097                 lcd.clearPixel (75,11);
00098                 lcd.clearPixel (75,12);
00099                 lcd.clearPixel (75,13);
00100                 lcd.clearPixel (75,15);
00101 
00102                 buzzer.period(1.0/1000.0);    // buzzer closed
00103                 buzzer=0.0;
00104                 wait(0.2);
00105 
00106 
00107             } else {                                     // situation which distance is below 16 and
00108                 x=67;
00109                 xOld = 67;
00110                 drawCar(x,40);
00111 
00112                 lcd.setPixel(77,9);  // symbol for exclamation mark
00113                 lcd.setPixel (77,10);
00114                 lcd.setPixel (77,11);
00115                 lcd.setPixel (77,12);
00116                 lcd.setPixel (77,13);
00117                 lcd.setPixel (77,15);
00118 
00119                 lcd.setPixel (79,9);
00120                 lcd.setPixel (79,10);
00121                 lcd.setPixel (79,11);
00122                 lcd.setPixel (79,12);
00123                 lcd.setPixel (79,13);
00124                 lcd.setPixel (79,15);
00125 
00126                 lcd.setPixel (75,9);
00127                 lcd.setPixel (75,10);
00128                 lcd.setPixel (75,11);
00129                 lcd.setPixel (75,12);
00130                 lcd.setPixel (75,13);
00131                 lcd.setPixel (75,15);
00132 
00133                 buzzer.period(1.0/1000.0);    //buzzer up
00134                 buzzer=0.5;
00135                 wait(0.2);
00136 
00137 
00138 
00139 
00140             }
00141         }
00142         lcd.setPixel(82,43);   //Building walls
00143         lcd.setPixel(81,42);
00144         lcd.setPixel(80,41);
00145         lcd.setPixel(79,40);
00146         lcd.setPixel(78,39);
00147         lcd.setPixel(77,38);
00148         lcd.setPixel (77,37);
00149         lcd.setPixel(77,36);
00150         lcd.setPixel (77,35);
00151         lcd.setPixel (77,34);
00152         lcd.setPixel (77,33);
00153         lcd.setPixel (77,32);
00154         lcd.setPixel (77,31);
00155         lcd.setPixel (77,30);
00156         lcd.setPixel (77,29);
00157         lcd.setPixel (77,28);
00158         lcd.setPixel (78,28);
00159         lcd.setPixel (79,29);
00160         lcd.setPixel (80,30);
00161         lcd.setPixel (81,31);
00162         lcd.setPixel (82,32);
00163 
00164         if ( distance >=0 && distance <= 16) {   //When the distance is from 0 to 16, the two led will flash and show warining signal
00165             if(g_timer_flag  == 1) {
00166                 r_led1 = !r_led1;
00167                 r_led2= !r_led2;
00168             }
00169         } else {                                //When the distance is above 16, the only one led flashs
00170             if(g_timer_flag  == 1) {
00171                 r_led1 = !r_led1;
00172                 r_led2= 0;
00173             }
00174         }
00175         lcd.refresh();
00176         sleep();
00177     }
00178 }
00179 
00180 void timer_isr()
00181 {
00182     g_timer_flag  = 1;   // set flag in ISR
00183 }
00184 
00185 void detect_isr()
00186 {
00187     g_detect_timer_flag  = 1;
00188 }
00189 
00190 void drawCar(int x,int y)   //43
00191 {
00192     lcd.setPixel(x,y);
00193     lcd.setPixel(x+1,y);
00194     lcd.setPixel(x+2,y);
00195     lcd.setPixel (x+3,y);
00196     lcd.setPixel (x+4,y);
00197     lcd.setPixel (x+5,y);
00198     lcd.setPixel (x+6,y);
00199     lcd.setPixel (x+7,y);
00200     lcd.setPixel (x+8,y);
00201     lcd.setPixel (x+9,y);
00202     lcd.setPixel (x+10,y);
00203     lcd.setPixel (x,y-1);
00204     lcd.setPixel (x+1,y-2);
00205     lcd.setPixel (x+2,y-3);
00206     lcd.setPixel (x+3,y-3);
00207     lcd.setPixel (x+4,y-3);
00208     lcd.setPixel (x+5,y-3);
00209     lcd.setPixel (x+6,y-3);
00210     lcd.setPixel (x+7,y-3);
00211     lcd.setPixel (x+9,y-1);
00212     lcd.setPixel (x+8,y-2);
00213     lcd.setPixel (x+10,y);
00214     lcd.drawCircle(x+2,y+2,1,1);
00215     lcd.drawCircle(x+7,y+2,1,1);
00216 
00217 }
00218 
00219 void clearCar(int x,int y)
00220 {
00221     lcd.clearPixel(x,y);
00222     lcd.clearPixel(x+1,y);
00223     lcd.clearPixel(x+2,y);
00224     lcd.clearPixel (x+3,y);
00225     lcd.clearPixel (x+4,y);
00226     lcd.clearPixel (x+5,y);
00227     lcd.clearPixel (x+6,y);
00228     lcd.clearPixel (x+7,y);
00229     lcd.clearPixel (x+8,y);
00230     lcd.clearPixel (x+9,y);
00231     lcd.clearPixel (x+10,y);
00232     lcd.clearPixel (x,y-1);
00233     lcd.clearPixel (x+1,y-2);
00234     lcd.clearPixel (x+2,y-3);
00235     lcd.clearPixel (x+3,y-3);
00236     lcd.clearPixel (x+4,y-3);
00237     lcd.clearPixel (x+5,y-3);
00238     lcd.clearPixel (x+6,y-3);
00239     lcd.clearPixel (x+7,y-3);
00240     lcd.clearPixel (x+9,y-1);
00241     lcd.clearPixel (x+8,y-2);
00242     lcd.clearPixel (x+10,y);
00243     lcd.drawCircle(x+2,y+2,1,2);
00244     lcd.drawCircle(x+7,y+2,1,2);
00245 }