A program designed to get the distance from an SRF02 distance sensor and create an audible and visual indication of that distance with data logging capabilities.

Dependencies:   N5110 PowerControl SRF02 mbed

Revision:
4:0bd5c189f2f3
Parent:
3:4e8fb4fb54df
Child:
5:c57cd4c57c40
--- a/main.cpp	Wed Apr 08 20:21:54 2015 +0000
+++ b/main.cpp	Thu Apr 09 09:49:06 2015 +0000
@@ -1,10 +1,81 @@
 // Distance Sensor Project
 // Main File "main.cpp"
 // Designed By Sam Russell (200773195)
-// Date: 07/04/2015 || Version: 0.3a
+// Date: 07/04/2015 || Version: 0.4a
 
 #include "main.h"
 
+void welcomeScreen()
+{
+    display.printString("--++--++--++--",0,0);     //Print string of "" at x,y locations.
+    display.printString("Distance",18,1);
+    display.printString("Sensor",22,2);
+    display.printString("--++--++--++--",0,3);
+    display.printString("Sam Russell",10,4);
+    display.printString("--++--++--++--",0,5);
+    wait(2); //Delay between the introduction and the begining of the game.
+    display.clear(); //Clears the display.
+}
+
+void barChart()
+{
+    if(distance<30) {
+        display.drawRect(0,0,82,20,0); //Draw initial bar graph border.
+    } else if(distance<60) {
+        display.drawRect(0,0,82,20,0); //Draw initial bar graph border.
+        display.drawRect(2,2,8,16,1); //Draw 1 Bar
+    } else if(distance<90) {
+        display.drawRect(0,0,82,20,0); //Draw initial bar graph border.
+        display.drawRect(2,2,8,16,1);
+        display.drawRect(12,2,8,16,1); //Draw 2 Bars
+    } else if(distance<120) {
+        display.drawRect(0,0,82,20,0); //Draw initial bar graph border.
+        display.drawRect(2,2,8,16,1);
+        display.drawRect(12,2,8,16,1);
+        display.drawRect(22,2,8,16,1); //Draw 3 Bars
+    } else if(distance<150) {
+        display.drawRect(0,0,82,20,0); //Draw initial bar graph border.
+        display.drawRect(2,2,8,16,1);
+        display.drawRect(12,2,8,16,1);
+        display.drawRect(22,2,8,16,1);
+        display.drawRect(32,2,8,16,1); //Draw 4 Bars
+    } else if(distance<180) {
+        display.drawRect(0,0,82,20,0); //Draw initial bar graph border.
+        display.drawRect(2,2,8,16,1);
+        display.drawRect(12,2,8,16,1);
+        display.drawRect(22,2,8,16,1);
+        display.drawRect(32,2,8,16,1);
+        display.drawRect(42,2,8,16,1); //Draw 5 Bars
+    } else if(distance<210) {
+        display.drawRect(0,0,82,20,0); //Draw initial bar graph border.
+        display.drawRect(2,2,8,16,1);
+        display.drawRect(12,2,8,16,1);
+        display.drawRect(22,2,8,16,1);
+        display.drawRect(32,2,8,16,1);
+        display.drawRect(42,2,8,16,1);
+        display.drawRect(52,2,8,16,1); //Draw 6 Bars
+    } else if(distance<240) {
+        display.drawRect(0,0,82,20,0); //Draw initial bar graph border.
+        display.drawRect(2,2,8,16,1);
+        display.drawRect(12,2,8,16,1);
+        display.drawRect(22,2,8,16,1);
+        display.drawRect(32,2,8,16,1);
+        display.drawRect(42,2,8,16,1);
+        display.drawRect(52,2,8,16,1);
+        display.drawRect(62,2,8,16,1); //Draw 7 Bars
+    } else {
+        display.drawRect(0,0,82,20,0); //Draw initial bar graph border.
+        display.drawRect(2,2,8,16,1);
+        display.drawRect(12,2,8,16,1);
+        display.drawRect(22,2,8,16,1);
+        display.drawRect(32,2,8,16,1);
+        display.drawRect(42,2,8,16,1);
+        display.drawRect(52,2,8,16,1);
+        display.drawRect(62,2,8,16,1);
+        display.drawRect(72,2,8,16,1); //Draw 8 Bars
+    }
+}
+
 void error(int code)
 //ERROR CODE
 {
@@ -77,6 +148,15 @@
     return distance;
 }
 
+void buttonPressed()
+{
+    mode++; //count up mode when button is pressed.
+    if(mode>2) {
+        //when mode becomes an integer value of 3, reset mode.
+        mode=0;
+    }
+}
+
 int main()
 {
     pc.baud(9600); //setting the baud rate
@@ -84,18 +164,13 @@
     timer.attach(&timerExpired,1);
     display.init(); // Initialise the display.
     display.clear(); // Clears the starting pattern from the screen.
-    display.printString("--++--++--++--",0,0);     //Print string of "" at x,y locations.
-    display.printString("Distance",18,1);
-    display.printString("Sensor",22,2);
-    display.printString("--++--++--++--",0,3);
-    display.printString("Sam Russell",10,4);
-    display.printString("--++--++--++--",0,5);
-    wait(2); //Delay between the introduction and the begining of the game.
-    display.clear(); //Clears the display.
+    welcomeScreen();
     pc.attach(&serialISR); // attach serial ISR
     char buffer[30]; // buffer used to store time string
     set_time(0); // initialise time to 1st January 1970
 
+    Button.rise(&buttonPressed); //change mode when button is pressed.
+
     while(1) {
         if(timerflag) {
             timerflag = 0;
@@ -107,10 +182,20 @@
             // print over serial
             pc.printf("%s , %d cm\n",buffer,distance); //print the temperature value and the date/time to the serial.
             display.clear(); //Clear the display, updating bar graph.
+            if(mode==0) {
+                display.printString("Normal Mode",8,5); //Print mode name to screen.
+                leds = 3; //mbed LED indication of mode.
+            } else if(mode==1) {
+                display.printString("Quiet Mode",10,5); //Print mode name to screen.
+                leds = 1; //mbed LED indication of mode.
+            } else if(mode==2) {
+                display.printString("Power Saving",8,5); //Print mode name to screen.
+                leds = 0; //mbed LED indication of mode.
+            }
             char buffer2[50]; // buffer2 is used to store the distance string.
             sprintf (buffer2, "%d cm", distance); //Composes a printf compatable string and stores the distance in the buffer2.
             display.printString(buffer2,25,3); //prints the string stored in buffer2
-            float L = Switch.read();
+            float L = Switch.read(); //check switch value
             if(L>0.9) {
                 //When switch is on, save the data to file and turn indicator on.
                 writeDataToFile(buffer,distance);
@@ -120,61 +205,7 @@
                 logLED = 0;
                 pc.printf("Not Logging Data\n");
             }
-            if(distance<30) {
-                display.drawRect(0,0,82,20,0); //Draw initial bar graph border.
-            } else if(distance<60) {
-                display.drawRect(0,0,82,20,0); //Draw initial bar graph border.
-                display.drawRect(2,2,8,16,1);
-            } else if(distance<90) {
-                display.drawRect(0,0,82,20,0); //Draw initial bar graph border.
-                display.drawRect(2,2,8,16,1);
-                display.drawRect(12,2,8,16,1);
-            } else if(distance<120) {
-                display.drawRect(0,0,82,20,0); //Draw initial bar graph border.
-                display.drawRect(2,2,8,16,1);
-                display.drawRect(12,2,8,16,1);
-                display.drawRect(22,2,8,16,1);
-            } else if(distance<150) {
-                display.drawRect(0,0,82,20,0); //Draw initial bar graph border.
-                display.drawRect(2,2,8,16,1);
-                display.drawRect(12,2,8,16,1);
-                display.drawRect(22,2,8,16,1);
-                display.drawRect(32,2,8,16,1);
-            } else if(distance<180) {
-                display.drawRect(0,0,82,20,0); //Draw initial bar graph border.
-                display.drawRect(2,2,8,16,1);
-                display.drawRect(12,2,8,16,1);
-                display.drawRect(22,2,8,16,1);
-                display.drawRect(32,2,8,16,1);
-                display.drawRect(42,2,8,16,1);
-            } else if(distance<210) {
-                display.drawRect(0,0,82,20,0); //Draw initial bar graph border.
-                display.drawRect(2,2,8,16,1);
-                display.drawRect(12,2,8,16,1);
-                display.drawRect(22,2,8,16,1);
-                display.drawRect(32,2,8,16,1);
-                display.drawRect(42,2,8,16,1);
-                display.drawRect(52,2,8,16,1);
-            } else if(distance<240) {
-                display.drawRect(0,0,82,20,0); //Draw initial bar graph border.
-                display.drawRect(2,2,8,16,1);
-                display.drawRect(12,2,8,16,1);
-                display.drawRect(22,2,8,16,1);
-                display.drawRect(32,2,8,16,1);
-                display.drawRect(42,2,8,16,1);
-                display.drawRect(52,2,8,16,1);
-                display.drawRect(62,2,8,16,1);
-            } else {
-                display.drawRect(0,0,82,20,0); //Draw initial bar graph border.
-                display.drawRect(2,2,8,16,1);
-                display.drawRect(12,2,8,16,1);
-                display.drawRect(22,2,8,16,1);
-                display.drawRect(32,2,8,16,1);
-                display.drawRect(42,2,8,16,1);
-                display.drawRect(52,2,8,16,1);
-                display.drawRect(62,2,8,16,1);
-                display.drawRect(72,2,8,16,1);
-            }
+            barChart(); //draw bar chart indicator.
         }
         if (setTimeFlag) { // if updated time has been sent
             setTimeFlag = 0; // clear flag