Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: N5110WN PowerControl SRF02 mbed
main.cpp@1:7f151ab172cb, 2015-03-20 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |