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:
- 7:65bdd2d0d6ad
- Parent:
- 6:d6afc4026a1d
- Child:
- 8:fc978cfd5763
diff -r d6afc4026a1d -r 65bdd2d0d6ad main.cpp --- a/main.cpp Thu Apr 09 11:32:48 2015 +0000 +++ b/main.cpp Sat Apr 11 15:55:42 2015 +0000 @@ -1,110 +1,94 @@ -// Distance Sensor Project -// Main File "main.cpp" -// Designed By Sam Russell (200773195) -// Date: 09/04/2015 || Version: 0.5 +/** +* @file main.cpp +* @brief Distance Sensor Project +* @brief Main file containing all of the functions and the int main(). +* @brief Version: 0.6 +* @author Sam Russell +* @date March 2015 +*/ #include "main.h" +int semihost_powerdown() { + uint32_t arg; + return __semihost(USR_POWERDOWN, &arg); + } + void welcomeScreen() { - display.printString("--++--++--++--",0,0); //Print string of "" at x,y locations. + 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. + 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. - if(mode==0) { - buzzer.period(1/246.94); - } - } 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 - if(mode==0) { - buzzer.period(1/246.94); + int buzz=0; + display.drawRect(0,0,82,20,0); ///Draw initial bar graph border. + if (distance>240) { + display.drawRect(72,2,8,16,1); ///Draw 8 Bars + if(mode==0 && buzz==0) { + buzzer.period(1/349.23); + buzz=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); //Draw 2 Bars - if(mode==0) { - buzzer.period(1/261.63); + }if(distance>210) { + display.drawRect(62,2,8,16,1); ///Draw 7 Bars + if(mode==0&&buzz==0) { + buzzer.period(1/329.63); + buzz=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); //Draw 3 Bars - if(mode==0) { - buzzer.period(1/261.63); + }if(distance>180) { + display.drawRect(52,2,8,16,1); ///Draw 6 Bars + if(mode==0 && buzz==0) { + buzzer.period(1/329.63); + buzz=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); //Draw 4 Bars - if(mode==0) { + } if(distance>150) { + display.drawRect(42,2,8,16,1); ///Draw 5 Bars + if(mode==0 && buzz==0) { buzzer.period(1/293.66); + buzz=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); //Draw 5 Bars - if(mode==0) { + } if(distance>120) { + display.drawRect(32,2,8,16,1); ///Draw 4 Bars + if(mode==0 && buzz==0) { buzzer.period(1/293.66); + buzz=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); //Draw 6 Bars - if(mode==0) { - buzzer.period(1/329.63); + } if(distance>90) { + display.drawRect(22,2,8,16,1); ///Draw 3 Bars + if(mode==0 && buzz==0) { + buzzer.period(1/261.63); + buzz=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); //Draw 7 Bars - if(mode==0) { - buzzer.period(1/329.63); + }if(distance>60) { + display.drawRect(12,2,8,16,1); ///Draw 2 Bars + if(mode==0 && buzz==0) { + buzzer.period(1/261.63); + buzz=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); //Draw 8 Bars - if(mode==0) { - buzzer.period(1/349.23); + } if(distance>30) { + display.drawRect(2,2,8,16,1); ///Draw 1 Bar + if(mode==0 && buzz==0) { + buzzer.period(1/246.94); + buzz=1; } - } + } + if(distance<30) { + if(mode==0 && buzz==0) { + buzzer.period(1/246.94); + buzz=1; + } + } } void error(int code) -//ERROR CODE +///ERROR CODE { while(1) { leds = 0; @@ -116,40 +100,40 @@ void setTime() { -// print time for debugging +/// print time for debugging pc.printf("set_time - %s",rxString); -// atoi() converts a string to an integer +/// atoi() converts a string to an integer int time = atoi(rxString); -// update the time +/// update the time set_time(time); } void serialISR() { -// when a serial interrupt occurs, read rx string into buffer +/// when a serial interrupt occurs, read rx string into buffer pc.gets(rxString,16); -// set flag +/// set flag setTimeFlag = 1; } void writeDataToFile(char* data, int dataDistance) { - logLED = 1; // turn on LEDs for feedback - pc.printf("Data Logged\n"); //DEBUG MESSAGE - FILE *fp = fopen("/local/log.csv", "a"); // open 'log.txt' for appending -// if the file doesn't exist it is created, if it exists, data is appended to the end - fprintf(fp,"%s %d\n",data,dataDistance); // print string to file - fclose(fp); // close file + logLED = 1; /// turn on LEDs for feedback + pc.printf("Data Logged\n"); ///DEBUG MESSAGE + FILE *fp = fopen("/local/log.csv", "a"); /// open 'log.txt' for appending +/// if the file doesn't exist it is created, if it exists, data is appended to the end + fprintf(fp,"%s %d\n",data,dataDistance); /// print string to file + fclose(fp); /// close file } -//When timer expires set flag to equal 1. +///When timer expires set flag to equal 1. void timerExpired() { timerflag = 1; } float avgDist() -//After 10 readings calculate the average and define that as the total distance. +///After 10 readings calculate the average and define that as the total distance. { float d1 = SRF02.getDistanceCm(); float d2 = SRF02.getDistanceCm(); @@ -168,70 +152,72 @@ void buttonPressed() { wait(0.2); - mode++; //count up mode when button is pressed. + mode++; ///count up mode when button is pressed. } int main() { - PHY_PowerDown(); //Powers down the ethernet. - pc.baud(9600); //setting the baud rate - timer.attach(&timerExpired,1); - display.init(); // Initialise the display. - display.clear(); // Clears the starting pattern from the screen. - welcomeScreen(); // Displays the welcome screen. - pc.attach(&serialISR); // attach serial ISR - char buffer[30]; // buffer used to store time string - set_time(0); // initialise time to 1st January 1970 + PHY_PowerDown(); ///Powers down the ethernet. + semihost_powerdown(); + pc.baud(9600); ///setting the baud rate + timer.attach(&timerExpired,1); ///every one second runs timer expired? + display.init(); /// Initialise the display. + display.clear(); /// Clears the starting pattern from the screen. + welcomeScreen(); /// Displays the welcome screen. + 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. + Button.rise(&buttonPressed); ///change mode when button is pressed. while(1) { if(timerflag) { timerflag = 0; ///Read sensor distance in cm and print to the serial port. - distance = avgDist(); //Set the distance variable to the averaged value from the sensor. - time_t seconds = time(NULL); // get current time - // format time into a string (time and date) + distance = avgDist(); ///Set the distance variable to the averaged value from the sensor. + time_t seconds = time(NULL); /// get current time + /// format time into a string (time and date) strftime(buffer, 30 , "%R %d/%m/%y", localtime(&seconds)); - // 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. + /// 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. + display.printString("Normal Mode",8,5); ///Print mode name to screen. buzzer =0.5; - leds = 3; //mbed LED indication of mode. + leds = 3; ///mbed LED indication of mode. } else if(mode==1) { - display.printString("Quiet Mode",10,5); //Print mode name to screen. + display.printString("Quiet Mode",10,5); ///Print mode name to screen. buzzer =0; - leds = 1; //mbed LED indication of mode. + leds = 1; ///mbed LED indication of mode. } else if(mode==2) { - display.printString("Power Saving",8,5); //Print mode name to screen. + display.printString("Power Saving",8,5); ///Print mode name to screen. backlight = 0; Sleep(); - leds = 0; //mbed LED indication of mode. + leds = 0; ///mbed LED indication of mode. } else if(mode==3) { - //when mode becomes an integer value of 3, reset mode. + ///when mode becomes an integer value of 3, reset mode. backlight =1; mode=0; } - 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(); //check switch value + 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(); ///check switch value if(L>0.9) { - //When switch is on, save the data to file and turn indicator on. + ///When switch is on, save the data to file and turn indicator on. writeDataToFile(buffer,distance); - pc.printf("Logging Data\n"); //DEBUG MESSAGE + pc.printf("Logging Data\n"); ///DEBUG MESSAGE } else { - //When switch is off, don't save the data to file and turn indictor off. + ///When switch is off, don't save the data to file and turn indictor off. logLED = 0; pc.printf("Not Logging Data\n"); } - barChart(); //draw bar chart indicator. + barChart(); ///draw bar chart indicator. } - if (setTimeFlag) { // if updated time has been sent - setTimeFlag = 0; // clear flag - setTime(); // update time + if (setTimeFlag) { /// if updated time has been sent + setTimeFlag = 0; /// clear flag + setTime(); /// update time } + sleep(); } }