Jakobi Blackburn / Mbed 2 deprecated UltrasonicDistanceSensor-el13jb

Dependencies:   N5110WN PowerControl SRF02 mbed

Committer:
JakBlackburn
Date:
Fri Mar 20 11:46:08 2015 +0000
Revision:
1:7f151ab172cb
Parent:
0:73bfbe8729d4
Child:
2:a1eaa4d74b63
Added RTC and logging capabilities

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JakBlackburn 1:7f151ab172cb 1 /**
JakBlackburn 1:7f151ab172cb 2 @file main.cpp
JakBlackburn 0:73bfbe8729d4 3
JakBlackburn 1:7f151ab172cb 4 @brief Program implementation
JakBlackburn 0:73bfbe8729d4 5
JakBlackburn 1:7f151ab172cb 6 */
JakBlackburn 1:7f151ab172cb 7 #include "main.h"
JakBlackburn 0:73bfbe8729d4 8
JakBlackburn 0:73bfbe8729d4 9
JakBlackburn 0:73bfbe8729d4 10
JakBlackburn 0:73bfbe8729d4 11 int main() {
JakBlackburn 1:7f151ab172cb 12 pc.baud(9600); //sets baud rate
JakBlackburn 1:7f151ab172cb 13 timer.attach(&timerExpired,0.5);
JakBlackburn 1:7f151ab172cb 14 LogTog.rise(&logButtonPressed);
JakBlackburn 1:7f151ab172cb 15 UnitTog.rise(&unitToggle);
JakBlackburn 1:7f151ab172cb 16 pc.attach(&serialISR); // attach serial ISR
JakBlackburn 1:7f151ab172cb 17
JakBlackburn 1:7f151ab172cb 18 char buffer[30]; // buffer used to store time string
JakBlackburn 1:7f151ab172cb 19 set_time(1427846400); // initialise time to 1st April 2015 00:00:00
JakBlackburn 1:7f151ab172cb 20
JakBlackburn 0:73bfbe8729d4 21 while(1) {
JakBlackburn 0:73bfbe8729d4 22 if(timerFlag){
JakBlackburn 1:7f151ab172cb 23
JakBlackburn 1:7f151ab172cb 24 timerFlag = 0; //resets flag
JakBlackburn 1:7f151ab172cb 25 time_t seconds = time(NULL); // get current time
JakBlackburn 1:7f151ab172cb 26 // format time into a string (time and date)
JakBlackburn 1:7f151ab172cb 27 strftime(buffer, 30 , "%d/%m/%y %R", localtime(&seconds));
JakBlackburn 1:7f151ab172cb 28 float dist = getDistance(); //reads the temperature and sets it to a float value.
JakBlackburn 1:7f151ab172cb 29 //prints the value to the serial port.
JakBlackburn 1:7f151ab172cb 30 if(unitX==0.01){pc.printf("@ %s , Distance = %.2f m \n",buffer,dist*unitX);}//prints the value to the serial port.
JakBlackburn 1:7f151ab172cb 31 else if(unitX==1){pc.printf("@ %s , Distance = %.0f cm \n",buffer,dist*unitX);}//prints the value to the serial port.
JakBlackburn 1:7f151ab172cb 32 else if(unitX==10){pc.printf("@ %s , Distance = %.0f mm \n",buffer,dist*unitX);}//prints the value to the serial port.
JakBlackburn 1:7f151ab172cb 33 leds=15;
JakBlackburn 1:7f151ab172cb 34 logging(buffer,dist);
JakBlackburn 1:7f151ab172cb 35 leds=0;
JakBlackburn 0:73bfbe8729d4 36 }
JakBlackburn 1:7f151ab172cb 37 if (setTimeFlag) { // if updated time has been sent
JakBlackburn 1:7f151ab172cb 38 setTimeFlag = 0; // clear flag
JakBlackburn 1:7f151ab172cb 39 setTime(); // update time
JakBlackburn 1:7f151ab172cb 40 }
JakBlackburn 0:73bfbe8729d4 41 }
JakBlackburn 0:73bfbe8729d4 42 }
JakBlackburn 0:73bfbe8729d4 43
JakBlackburn 0:73bfbe8729d4 44 void timerExpired(){
JakBlackburn 0:73bfbe8729d4 45 timerFlag=1;
JakBlackburn 0:73bfbe8729d4 46 }
JakBlackburn 0:73bfbe8729d4 47
JakBlackburn 0:73bfbe8729d4 48
JakBlackburn 0:73bfbe8729d4 49 void warnings(){
JakBlackburn 0:73bfbe8729d4 50 WLED=1;
JakBlackburn 0:73bfbe8729d4 51 volume= BuzVol.read();
JakBlackburn 0:73bfbe8729d4 52 Buzzer.PlayNote(800.0, 0.1, volume);
JakBlackburn 0:73bfbe8729d4 53 WLED=0;
JakBlackburn 0:73bfbe8729d4 54 }
JakBlackburn 1:7f151ab172cb 55 float getDistance(){
JakBlackburn 0:73bfbe8729d4 56 int dist0 = sensor.getDistanceCm();
JakBlackburn 1:7f151ab172cb 57 wait(0.1*scanSpeed);
JakBlackburn 0:73bfbe8729d4 58 int dist1 = sensor.getDistanceCm();
JakBlackburn 1:7f151ab172cb 59 wait(0.1*scanSpeed);
JakBlackburn 0:73bfbe8729d4 60 int dist2 = sensor.getDistanceCm();
JakBlackburn 1:7f151ab172cb 61 wait(0.1*scanSpeed);
JakBlackburn 0:73bfbe8729d4 62 int dist3 = sensor.getDistanceCm();
JakBlackburn 1:7f151ab172cb 63 wait(0.1*scanSpeed);
JakBlackburn 0:73bfbe8729d4 64 int dist4 = sensor.getDistanceCm();
JakBlackburn 1:7f151ab172cb 65 wait(0.1*scanSpeed);
JakBlackburn 0:73bfbe8729d4 66 int dist5 = sensor.getDistanceCm();
JakBlackburn 1:7f151ab172cb 67 wait(0.1*scanSpeed);
JakBlackburn 0:73bfbe8729d4 68 int dist6 = sensor.getDistanceCm();
JakBlackburn 1:7f151ab172cb 69 wait(0.1*scanSpeed);
JakBlackburn 0:73bfbe8729d4 70 int dist7 = sensor.getDistanceCm();
JakBlackburn 1:7f151ab172cb 71 wait(0.1*scanSpeed);
JakBlackburn 0:73bfbe8729d4 72 int dist8 = sensor.getDistanceCm();
JakBlackburn 1:7f151ab172cb 73 wait(0.1*scanSpeed);
JakBlackburn 0:73bfbe8729d4 74 int dist9 = sensor.getDistanceCm();
JakBlackburn 1:7f151ab172cb 75 distance=(dist0+dist1+dist2+dist3+dist4+dist5+dist6+dist7+dist8+dist9)/10;
JakBlackburn 1:7f151ab172cb 76 setScanSpeed();
JakBlackburn 0:73bfbe8729d4 77 warnings();
JakBlackburn 1:7f151ab172cb 78 return distance;
JakBlackburn 0:73bfbe8729d4 79 }
JakBlackburn 0:73bfbe8729d4 80
JakBlackburn 0:73bfbe8729d4 81 void unitToggle(){
JakBlackburn 1:7f151ab172cb 82 state = fsm[state].nextState[UnitTog]; // read input and update current state
JakBlackburn 0:73bfbe8729d4 83 unitX = fsm[state].unitMultiple; // set output depending on current state
JakBlackburn 1:7f151ab172cb 84 // units= fsm[state].Unit; //
JakBlackburn 1:7f151ab172cb 85 wait(0.2);
JakBlackburn 1:7f151ab172cb 86 pc.printf("unit multiple = %.2f \n",unitX);
JakBlackburn 1:7f151ab172cb 87 // pc.printf("Units = %s \n",units);
JakBlackburn 1:7f151ab172cb 88
JakBlackburn 1:7f151ab172cb 89 }
JakBlackburn 1:7f151ab172cb 90
JakBlackburn 1:7f151ab172cb 91 void setScanSpeed(){
JakBlackburn 1:7f151ab172cb 92 if(distance>=100){
JakBlackburn 1:7f151ab172cb 93 scanSpeed=2; // sets the speed to normal
JakBlackburn 1:7f151ab172cb 94 }
JakBlackburn 1:7f151ab172cb 95 else if(distance>=25){
JakBlackburn 1:7f151ab172cb 96 scanSpeed=1; // double speed
JakBlackburn 1:7f151ab172cb 97 }
JakBlackburn 1:7f151ab172cb 98 else if(distance<25){
JakBlackburn 1:7f151ab172cb 99 scanSpeed=0.25; // quad speed
JakBlackburn 1:7f151ab172cb 100 }
JakBlackburn 1:7f151ab172cb 101 else error(1);
JakBlackburn 1:7f151ab172cb 102
JakBlackburn 1:7f151ab172cb 103 pc.printf("Scan Speed = %.2f/times a second \n\n",(1/scanSpeed));
JakBlackburn 1:7f151ab172cb 104 }
JakBlackburn 1:7f151ab172cb 105 void error(int E){
JakBlackburn 1:7f151ab172cb 106 while(1){
JakBlackburn 1:7f151ab172cb 107 leds=0;
JakBlackburn 1:7f151ab172cb 108 wait(0.2);
JakBlackburn 1:7f151ab172cb 109 leds=E;
JakBlackburn 1:7f151ab172cb 110 wait(0.2);
JakBlackburn 1:7f151ab172cb 111 }
JakBlackburn 0:73bfbe8729d4 112 }
JakBlackburn 0:73bfbe8729d4 113
JakBlackburn 1:7f151ab172cb 114 void logButtonPressed()
JakBlackburn 1:7f151ab172cb 115 {
JakBlackburn 1:7f151ab172cb 116 logButtonFlag = !logButtonFlag; //flips the flag
JakBlackburn 1:7f151ab172cb 117 if(logButtonFlag) {
JakBlackburn 1:7f151ab172cb 118 LLED=1; // Logging LED will be on if the device is logging
JakBlackburn 1:7f151ab172cb 119 pc.printf("-------\n Data Logging\n\r");
JakBlackburn 1:7f151ab172cb 120 } else {
JakBlackburn 1:7f151ab172cb 121 LLED=0; // Logging LED will be off if the device isn't logging
JakBlackburn 1:7f151ab172cb 122 pc.printf("-------\n Stopped Logging Data\n\r");
JakBlackburn 0:73bfbe8729d4 123 }
JakBlackburn 1:7f151ab172cb 124 wait(0.2);
JakBlackburn 1:7f151ab172cb 125 }
JakBlackburn 1:7f151ab172cb 126
JakBlackburn 1:7f151ab172cb 127 void logging(char* data,float data1)
JakBlackburn 1:7f151ab172cb 128 {
JakBlackburn 1:7f151ab172cb 129 if(logButtonFlag) {
JakBlackburn 1:7f151ab172cb 130 FILE *fp = fopen("/local/log.csv", "a"); // open 'log.csv' for appending
JakBlackburn 1:7f151ab172cb 131 // if the file doesn't exist it is created, if it exists, data is appended to the end
JakBlackburn 1:7f151ab172cb 132 fprintf(fp," %s , %.2f\n ",data,data1); // print string to file
JakBlackburn 1:7f151ab172cb 133 fclose(fp); // close file
JakBlackburn 1:7f151ab172cb 134 pc.printf("Data Logged\n\r");
JakBlackburn 1:7f151ab172cb 135 LLED=1; //keeps the led on if it is logging
JakBlackburn 1:7f151ab172cb 136 } else {
JakBlackburn 1:7f151ab172cb 137 pc.printf("WARNING : Unlogged Data\n\r");
JakBlackburn 1:7f151ab172cb 138 LLED=0;
JakBlackburn 0:73bfbe8729d4 139 }
JakBlackburn 1:7f151ab172cb 140 }
JakBlackburn 1:7f151ab172cb 141
JakBlackburn 1:7f151ab172cb 142 void setTime()
JakBlackburn 1:7f151ab172cb 143 {
JakBlackburn 1:7f151ab172cb 144 // print time for debugging
JakBlackburn 1:7f151ab172cb 145 pc.printf("set time - %s",rxString);
JakBlackburn 1:7f151ab172cb 146 // atoi() converts a string to an integer
JakBlackburn 1:7f151ab172cb 147 int time = atoi(rxString);
JakBlackburn 1:7f151ab172cb 148 // update the time
JakBlackburn 1:7f151ab172cb 149 set_time(time);
JakBlackburn 1:7f151ab172cb 150 pc.printf("set time - %d",time);
JakBlackburn 1:7f151ab172cb 151 }
JakBlackburn 1:7f151ab172cb 152 void serialISR()
JakBlackburn 1:7f151ab172cb 153 {
JakBlackburn 1:7f151ab172cb 154 // when a serial interrupt occurs, read rx string into buffer
JakBlackburn 1:7f151ab172cb 155 pc.gets(rxString,16);
JakBlackburn 1:7f151ab172cb 156 // set flag
JakBlackburn 1:7f151ab172cb 157 setTimeFlag = 1;
JakBlackburn 0:73bfbe8729d4 158 }