Sensor_Project

Dependencies:   N5110 SRF02 mbed

Revision:
0:fdd8c55c50e9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu May 05 11:01:46 2016 +0000
@@ -0,0 +1,245 @@
+
+#include "main.h"
+
+int main()
+{
+    int distance;
+    int lcd_message;
+    char distance_array [14];
+    lcd.init();  // initialise display
+    lcd.normalMode();      // normal colour mode
+    lcd.setBrightness(1.0); // put LED backlight on 50%
+    for (int i=0; i < 23; i++) {
+        lcd.drawCircle(42,24,i,0);
+        lcd.refresh();
+        wait(0.2);
+    }
+    lcd.clear();
+    lcd.printString("Welocme to",15,1);
+    lcd.printString ("Sensor Project",2,3);
+    lcd.printString("Xin Zhang",0,5);
+    wait (2.0);
+    lcd.clear();
+    lcd.refresh();
+    ticker.attach(&timer_isr,0.5); //2Hz   LED flash
+    detect.attach(&detect_isr,0.5); //2HZ  Sensor detect 
+    while(1) {
+
+        if(g_detect_timer_flag == 1) {
+            for(int i=0; i<=9; i++) {                     //Detect 10 times 
+                distanceArray[i]=sensor.getDistanceCm(); // read sensor distance in cm and print over serial port
+            }
+
+            int sum=0;                                  // Make sensor to detect 10 times and add togther in order to get mean value
+            for(int i=0; i<=9; i++) {
+                sum=sum+distanceArray[i];
+            }
+
+            distance = sum/10;                          // Getting Mean vlaue
+
+            lcd_message = sprintf(distance_array, "D = %d CM",distance);// short delay before next measurement
+
+            lcd.printString(distance_array,5,1);
+
+            int x;
+            clearCar(xOld,40);
+            if (distance >= 300) {                       // situation which distance is above 300
+                x=2;
+                xOld=2;
+                drawCar(x,40);
+
+                lcd.clearPixel(77,9);      //Delete symbol for exclamation mark
+                lcd.clearPixel (77,10);
+                lcd.clearPixel (77,11);
+                lcd.clearPixel (77,12);
+                lcd.clearPixel (77,13);
+                lcd.clearPixel (77,15);
+
+                lcd.clearPixel (79,9);
+                lcd.clearPixel (79,10);
+                lcd.clearPixel (79,11);
+                lcd.clearPixel (79,12);
+                lcd.clearPixel (79,13);
+                lcd.clearPixel (79,15);
+
+                lcd.clearPixel (75,9);
+                lcd.clearPixel (75,10);
+                lcd.clearPixel (75,11);
+                lcd.clearPixel (75,12);
+                lcd.clearPixel (75,13);
+                lcd.clearPixel (75,15);
+
+                buzzer.period(1.0/1000.0);      // buzzer cloesd
+                buzzer=0.0;
+                wait(0.2);
+
+            } else if(distance < 300 && distance >16) {     // situation  which distance is from 16 to 300
+                x = 68.0-(66.0/284 * distance);
+                xOld = 68.0-(66.0/284 * distance);
+                drawCar(x,40);
+
+                lcd.clearPixel(77,9);
+                lcd.clearPixel (77,10);
+                lcd.clearPixel (77,11);
+                lcd.clearPixel (77,12);
+                lcd.clearPixel (77,13);
+                lcd.clearPixel (77,15);
+
+                lcd.clearPixel (79,9);
+                lcd.clearPixel (79,10);
+                lcd.clearPixel (79,11);
+                lcd.clearPixel (79,12);
+                lcd.clearPixel (79,13);
+                lcd.clearPixel (79,15);
+
+                lcd.clearPixel (75,9);
+                lcd.clearPixel (75,10);
+                lcd.clearPixel (75,11);
+                lcd.clearPixel (75,12);
+                lcd.clearPixel (75,13);
+                lcd.clearPixel (75,15);
+
+                buzzer.period(1.0/1000.0);    // buzzer closed
+                buzzer=0.0;
+                wait(0.2);
+
+
+            } else {                                     // situation which distance is below 16 and
+                x=67;
+                xOld = 67;
+                drawCar(x,40);
+
+                lcd.setPixel(77,9);  // symbol for exclamation mark
+                lcd.setPixel (77,10);
+                lcd.setPixel (77,11);
+                lcd.setPixel (77,12);
+                lcd.setPixel (77,13);
+                lcd.setPixel (77,15);
+
+                lcd.setPixel (79,9);
+                lcd.setPixel (79,10);
+                lcd.setPixel (79,11);
+                lcd.setPixel (79,12);
+                lcd.setPixel (79,13);
+                lcd.setPixel (79,15);
+
+                lcd.setPixel (75,9);
+                lcd.setPixel (75,10);
+                lcd.setPixel (75,11);
+                lcd.setPixel (75,12);
+                lcd.setPixel (75,13);
+                lcd.setPixel (75,15);
+
+                buzzer.period(1.0/1000.0);    //buzzer up
+                buzzer=0.5;
+                wait(0.2);
+
+
+
+
+            }
+        }
+        lcd.setPixel(82,43);   //Building walls
+        lcd.setPixel(81,42);
+        lcd.setPixel(80,41);
+        lcd.setPixel(79,40);
+        lcd.setPixel(78,39);
+        lcd.setPixel(77,38);
+        lcd.setPixel (77,37);
+        lcd.setPixel(77,36);
+        lcd.setPixel (77,35);
+        lcd.setPixel (77,34);
+        lcd.setPixel (77,33);
+        lcd.setPixel (77,32);
+        lcd.setPixel (77,31);
+        lcd.setPixel (77,30);
+        lcd.setPixel (77,29);
+        lcd.setPixel (77,28);
+        lcd.setPixel (78,28);
+        lcd.setPixel (79,29);
+        lcd.setPixel (80,30);
+        lcd.setPixel (81,31);
+        lcd.setPixel (82,32);
+
+        if ( distance >=0 && distance <= 16) {   //When the distance is from 0 to 16, the two led will flash and show warining signal
+            if(g_timer_flag == 1) {
+                r_led1 = !r_led1;
+                r_led2= !r_led2;
+            }
+        } else {                                //When the distance is above 16, the only one led flashs
+            if(g_timer_flag == 1) {
+                r_led1 = !r_led1;
+                r_led2= 0;
+            }
+        }
+        lcd.refresh();
+        sleep();
+    }
+}
+
+void timer_isr()
+{
+    g_timer_flag = 1;   // set flag in ISR
+}
+
+void detect_isr()
+{
+    g_detect_timer_flag = 1;
+}
+
+void drawCar(int x,int y)   //43
+{
+    lcd.setPixel(x,y);
+    lcd.setPixel(x+1,y);
+    lcd.setPixel(x+2,y);
+    lcd.setPixel (x+3,y);
+    lcd.setPixel (x+4,y);
+    lcd.setPixel (x+5,y);
+    lcd.setPixel (x+6,y);
+    lcd.setPixel (x+7,y);
+    lcd.setPixel (x+8,y);
+    lcd.setPixel (x+9,y);
+    lcd.setPixel (x+10,y);
+    lcd.setPixel (x,y-1);
+    lcd.setPixel (x+1,y-2);
+    lcd.setPixel (x+2,y-3);
+    lcd.setPixel (x+3,y-3);
+    lcd.setPixel (x+4,y-3);
+    lcd.setPixel (x+5,y-3);
+    lcd.setPixel (x+6,y-3);
+    lcd.setPixel (x+7,y-3);
+    lcd.setPixel (x+9,y-1);
+    lcd.setPixel (x+8,y-2);
+    lcd.setPixel (x+10,y);
+    lcd.drawCircle(x+2,y+2,1,1);
+    lcd.drawCircle(x+7,y+2,1,1);
+
+}
+
+void clearCar(int x,int y)
+{
+    lcd.clearPixel(x,y);
+    lcd.clearPixel(x+1,y);
+    lcd.clearPixel(x+2,y);
+    lcd.clearPixel (x+3,y);
+    lcd.clearPixel (x+4,y);
+    lcd.clearPixel (x+5,y);
+    lcd.clearPixel (x+6,y);
+    lcd.clearPixel (x+7,y);
+    lcd.clearPixel (x+8,y);
+    lcd.clearPixel (x+9,y);
+    lcd.clearPixel (x+10,y);
+    lcd.clearPixel (x,y-1);
+    lcd.clearPixel (x+1,y-2);
+    lcd.clearPixel (x+2,y-3);
+    lcd.clearPixel (x+3,y-3);
+    lcd.clearPixel (x+4,y-3);
+    lcd.clearPixel (x+5,y-3);
+    lcd.clearPixel (x+6,y-3);
+    lcd.clearPixel (x+7,y-3);
+    lcd.clearPixel (x+9,y-1);
+    lcd.clearPixel (x+8,y-2);
+    lcd.clearPixel (x+10,y);
+    lcd.drawCircle(x+2,y+2,1,2);
+    lcd.drawCircle(x+7,y+2,1,2);
+}
\ No newline at end of file