![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
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
Diff: main.cpp
- Revision:
- 4:0bd5c189f2f3
- Parent:
- 3:4e8fb4fb54df
- Child:
- 5:c57cd4c57c40
diff -r 4e8fb4fb54df -r 0bd5c189f2f3 main.cpp --- 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