This program allows user to measure distance with SRF02 distance sensor and display the result on a Nokia LCD Display

Dependencies:   N5110 PowerControl SRF02 mbed

Committer:
el13a2w
Date:
Fri Apr 10 14:14:52 2015 +0000
Revision:
1:c720fcb68396
Parent:
0:b6b1dc0389cb
Child:
2:272d9de9f37e
2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el13a2w 0:b6b1dc0389cb 1 #include "mbed.h"
el13a2w 0:b6b1dc0389cb 2 #include "PowerControl/PowerControl.h"
el13a2w 0:b6b1dc0389cb 3 #include "PowerControl/EthernetPowerControl.h"
el13a2w 0:b6b1dc0389cb 4 #include "SRF02.h"
el13a2w 0:b6b1dc0389cb 5 #include "N5110.h"
el13a2w 0:b6b1dc0389cb 6
el13a2w 1:c720fcb68396 7 // vcc, sce, rst, dc, mosi, clk, led
el13a2w 1:c720fcb68396 8 N5110 lcd(p7,p8,p9,p10,p11,p13,p26); //pwm for led backlight
el13a2w 0:b6b1dc0389cb 9 BusOut leds(LED4,LED3,LED2,LED1); // Onboard LEDs
el13a2w 0:b6b1dc0389cb 10 SRF02 sensor(p28,p27); // sda, scl
el13a2w 0:b6b1dc0389cb 11 Serial serial(USBTX,USBRX); // tx, rx
el13a2w 0:b6b1dc0389cb 12 Ticker timer1; // timer1
el13a2w 0:b6b1dc0389cb 13 Ticker timer2; // timer2
el13a2w 0:b6b1dc0389cb 14 Ticker timer3; // timer3
el13a2w 0:b6b1dc0389cb 15 Ticker timer4; // timer4
el13a2w 0:b6b1dc0389cb 16 Ticker timer5; // timer5
el13a2w 0:b6b1dc0389cb 17 InterruptIn unit(p16); // input interrupt button
el13a2w 0:b6b1dc0389cb 18 InterruptIn display(p17); // input interrupt button
el13a2w 0:b6b1dc0389cb 19 DigitalOut led1(p24); // on/off LED
el13a2w 0:b6b1dc0389cb 20 DigitalOut led2(p23); // warning LED
el13a2w 0:b6b1dc0389cb 21 PwmOut buzzer(p21); // warning buzzer
el13a2w 1:c720fcb68396 22 AnalogIn pot(p20);
el13a2w 0:b6b1dc0389cb 23 LocalFileSystem local("local"); // create local filesystem
el13a2w 0:b6b1dc0389cb 24
el13a2w 0:b6b1dc0389cb 25 void serialISR(); // ISR that is called when serial data is received
el13a2w 0:b6b1dc0389cb 26 void setTime(); // function to set the UNIX time
el13a2w 0:b6b1dc0389cb 27 char rxString[16]; // buffer to store received string
el13a2w 0:b6b1dc0389cb 28 void error(int code); // determines error
el13a2w 0:b6b1dc0389cb 29 void uPressed(); // function to action of unit button
el13a2w 0:b6b1dc0389cb 30 void dPressed(); // function to action of display button
el13a2w 0:b6b1dc0389cb 31 void timer1Expired(); // function to action when timer1 triggers
el13a2w 0:b6b1dc0389cb 32 void timer2Expired(); // function to action when timer2 triggers
el13a2w 0:b6b1dc0389cb 33 void timer3Expired(); // function to action when timer3 triggers
el13a2w 0:b6b1dc0389cb 34 void timer4Expired(); // function to action when timer4 triggers
el13a2w 0:b6b1dc0389cb 35 void timer5Expired(); // function to action when timer5 triggers
el13a2w 0:b6b1dc0389cb 36 void warning(); // warning function
el13a2w 0:b6b1dc0389cb 37 void writeDataToFile(char* buffer, float distance); // function to write data to file
el13a2w 0:b6b1dc0389cb 38 float measureDistance(); // function to get distance
el13a2w 0:b6b1dc0389cb 39
el13a2w 0:b6b1dc0389cb 40 int timer1Flag = 0; // set timer1Flag
el13a2w 0:b6b1dc0389cb 41 int timer2Flag = 0; // set timer2Flag
el13a2w 0:b6b1dc0389cb 42 int timer3Flag = 0; // set timer3Flag
el13a2w 0:b6b1dc0389cb 43 int timer4Flag = 0; // set timer4Flag
el13a2w 0:b6b1dc0389cb 44 int timer5Flag = 0; // set timer5Flag
el13a2w 0:b6b1dc0389cb 45 int uFlag = 0; // set unitFlag
el13a2w 0:b6b1dc0389cb 46 int dFlag = 0; // set displayFlag
el13a2w 0:b6b1dc0389cb 47 int setTimeFlag = 0; // flag for ISR
el13a2w 1:c720fcb68396 48 int nGen[84][48]; // array set
el13a2w 1:c720fcb68396 49 int x = 84; // size of set horizontally (x-axis)
el13a2w 1:c720fcb68396 50 int y = 48; //size of set vertically (y-axis)
el13a2w 0:b6b1dc0389cb 51
el13a2w 0:b6b1dc0389cb 52 int main()
el13a2w 0:b6b1dc0389cb 53 {
el13a2w 1:c720fcb68396 54 lcd.init(); // initialise display
el13a2w 1:c720fcb68396 55 lcd.printString("Ultrasonic", 13,1);
el13a2w 1:c720fcb68396 56 lcd.printString("Sensor", 25,2);
el13a2w 1:c720fcb68396 57 lcd.printString("Adrian Wong", 9,4);
el13a2w 1:c720fcb68396 58 lcd.drawRect(1,1,81,45,0); // transparent, just outline
el13a2w 1:c720fcb68396 59 lcd.drawRect(5,26,28,2,1); // filled black rectangle
el13a2w 1:c720fcb68396 60 lcd.drawRect(51,26,28,2,1); // filled black rectangle
el13a2w 1:c720fcb68396 61 lcd.printString("X", 40,3);
el13a2w 1:c720fcb68396 62 lcd.drawCircle(37,27,1,1); // x,y,radius,black fill
el13a2w 1:c720fcb68396 63 lcd.drawCircle(47,27,1,1); // x,y,radius,black fill
el13a2w 1:c720fcb68396 64 wait(1);
el13a2w 1:c720fcb68396 65 lcd.clear(); // Clear all pixels off display
el13a2w 1:c720fcb68396 66
el13a2w 0:b6b1dc0389cb 67 serial.baud(9600); // set baud rate
el13a2w 0:b6b1dc0389cb 68 unit.rise(&uPressed); // call ISR on rising edge (button pressed)
el13a2w 0:b6b1dc0389cb 69 display.rise(&dPressed); // call ISR on rising edge (button pressed)
el13a2w 0:b6b1dc0389cb 70 timer1.attach(&timer1Expired,2); // 2s timer
el13a2w 0:b6b1dc0389cb 71 timer2.attach(&timer2Expired,1.5); // 2s timer
el13a2w 0:b6b1dc0389cb 72 timer3.attach(&timer3Expired,1); // 2s timer
el13a2w 0:b6b1dc0389cb 73 timer4.attach(&timer4Expired,0.5); // 2s timer
el13a2w 0:b6b1dc0389cb 74 timer5.attach(&timer5Expired,0.1); // 2s timer
el13a2w 0:b6b1dc0389cb 75 serial.attach(&serialISR); // attach serial ISR
el13a2w 1:c720fcb68396 76 char buffer[30]; // buffer used to store information
el13a2w 0:b6b1dc0389cb 77 set_time(0); // initialise time to 1st January 1970
el13a2w 0:b6b1dc0389cb 78 led1 = 1;
el13a2w 1:c720fcb68396 79
el13a2w 0:b6b1dc0389cb 80 while(1) {
el13a2w 1:c720fcb68396 81 lcd.normalMode(); // normal colour mode
el13a2w 1:c720fcb68396 82 lcd.setBrightness(0.5); // put LED backlight on 50%
el13a2w 0:b6b1dc0389cb 83 led2 = 0;
el13a2w 0:b6b1dc0389cb 84 buzzer = 0;
el13a2w 0:b6b1dc0389cb 85 buzzer.period(0.001);
el13a2w 0:b6b1dc0389cb 86 float distance = measureDistance();
el13a2w 0:b6b1dc0389cb 87 time_t seconds = time(NULL); // get current time
el13a2w 0:b6b1dc0389cb 88 // format time into a string (time and date)
el13a2w 1:c720fcb68396 89 strftime(buffer, 30 , "%b %d, %X", localtime(&seconds));
el13a2w 1:c720fcb68396 90 /*if (dFlag) {
el13a2w 1:c720fcb68396 91 writeDataToFile(buffer, distance); // write current value to disk
el13a2w 1:c720fcb68396 92 }*/
el13a2w 1:c720fcb68396 93 lcd.clear();
el13a2w 1:c720fcb68396 94 lcd.init(); // initialise display
el13a2w 0:b6b1dc0389cb 95 if (distance<30) {
el13a2w 0:b6b1dc0389cb 96 if (timer5Flag) {
el13a2w 0:b6b1dc0389cb 97 timer5Flag = 0;
el13a2w 0:b6b1dc0389cb 98 timer4Flag = 0;
el13a2w 0:b6b1dc0389cb 99 timer3Flag = 0;
el13a2w 0:b6b1dc0389cb 100 timer2Flag = 0;
el13a2w 0:b6b1dc0389cb 101 timer1Flag = 0;
el13a2w 0:b6b1dc0389cb 102 if (uFlag) {
el13a2w 0:b6b1dc0389cb 103 float mdistance = distance/100;
el13a2w 0:b6b1dc0389cb 104 serial.printf("%s, %.2f m\n",buffer, mdistance);
el13a2w 1:c720fcb68396 105 float length = sprintf(buffer,"D = %.2f m",mdistance);
el13a2w 1:c720fcb68396 106 if (dFlag) {
el13a2w 1:c720fcb68396 107 if (length <= 14) {
el13a2w 1:c720fcb68396 108 lcd.printString(buffer,7,1);
el13a2w 1:c720fcb68396 109 }
el13a2w 1:c720fcb68396 110 } else {
el13a2w 1:c720fcb68396 111 lcd.drawRect(1,1,84,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 112 }
el13a2w 0:b6b1dc0389cb 113 } else {
el13a2w 0:b6b1dc0389cb 114 serial.printf("%s, %.0f cm\n",buffer, distance);
el13a2w 1:c720fcb68396 115 float length = sprintf(buffer,"D = %.2f cm",distance);
el13a2w 1:c720fcb68396 116 if (dFlag) {
el13a2w 1:c720fcb68396 117 if (length <= 14) {
el13a2w 1:c720fcb68396 118 lcd.printString(buffer,7,1);
el13a2w 1:c720fcb68396 119 }
el13a2w 1:c720fcb68396 120 } else {
el13a2w 1:c720fcb68396 121 lcd.drawRect(1,1,84,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 122 }
el13a2w 0:b6b1dc0389cb 123 }
el13a2w 0:b6b1dc0389cb 124 serial.printf("Rate = 0.1\n");
el13a2w 0:b6b1dc0389cb 125 warning();
el13a2w 0:b6b1dc0389cb 126 }
el13a2w 0:b6b1dc0389cb 127 } else if (distance<60) {
el13a2w 0:b6b1dc0389cb 128 if (timer4Flag) {
el13a2w 0:b6b1dc0389cb 129 timer5Flag = 0;
el13a2w 0:b6b1dc0389cb 130 timer4Flag = 0;
el13a2w 0:b6b1dc0389cb 131 timer3Flag = 0;
el13a2w 0:b6b1dc0389cb 132 timer2Flag = 0;
el13a2w 0:b6b1dc0389cb 133 timer1Flag = 0;
el13a2w 0:b6b1dc0389cb 134 if (uFlag) {
el13a2w 0:b6b1dc0389cb 135 float mdistance = distance/100;
el13a2w 0:b6b1dc0389cb 136 serial.printf("%s, %.2f m\n",buffer, mdistance);
el13a2w 1:c720fcb68396 137 float length = sprintf(buffer,"D = %.2f m",mdistance);
el13a2w 1:c720fcb68396 138 if (dFlag) {
el13a2w 1:c720fcb68396 139 if (length <= 14) {
el13a2w 1:c720fcb68396 140 lcd.printString(buffer,7,1);
el13a2w 1:c720fcb68396 141 }
el13a2w 1:c720fcb68396 142 } else {
el13a2w 1:c720fcb68396 143 lcd.drawRect(1,1,64,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 144 }
el13a2w 0:b6b1dc0389cb 145 } else {
el13a2w 0:b6b1dc0389cb 146 serial.printf("%s, %.0f cm\n",buffer, distance);
el13a2w 1:c720fcb68396 147 float length = sprintf(buffer,"D = %.2f cm",distance);
el13a2w 1:c720fcb68396 148 if (dFlag) {
el13a2w 1:c720fcb68396 149 if (length <= 14) {
el13a2w 1:c720fcb68396 150 lcd.printString(buffer,7,1);
el13a2w 1:c720fcb68396 151 }
el13a2w 1:c720fcb68396 152 } else {
el13a2w 1:c720fcb68396 153 lcd.drawRect(1,1,64,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 154 }
el13a2w 0:b6b1dc0389cb 155 }
el13a2w 1:c720fcb68396 156 serial.printf("Rate = 0.1\n");
el13a2w 0:b6b1dc0389cb 157 warning();
el13a2w 0:b6b1dc0389cb 158 }
el13a2w 0:b6b1dc0389cb 159 } else if (distance<90) {
el13a2w 0:b6b1dc0389cb 160 if (timer3Flag) {
el13a2w 0:b6b1dc0389cb 161 timer5Flag = 0;
el13a2w 0:b6b1dc0389cb 162 timer4Flag = 0;
el13a2w 0:b6b1dc0389cb 163 timer3Flag = 0;
el13a2w 0:b6b1dc0389cb 164 timer2Flag = 0;
el13a2w 0:b6b1dc0389cb 165 timer1Flag = 0;
el13a2w 0:b6b1dc0389cb 166 if (uFlag) {
el13a2w 0:b6b1dc0389cb 167 float mdistance = distance/100;
el13a2w 0:b6b1dc0389cb 168 serial.printf("%s, %.2f m\n",buffer, mdistance);
el13a2w 1:c720fcb68396 169 float length = sprintf(buffer,"D = %.2f m",mdistance);
el13a2w 1:c720fcb68396 170 if (dFlag) {
el13a2w 1:c720fcb68396 171 if (length <= 14) {
el13a2w 1:c720fcb68396 172 lcd.printString(buffer,7,1);
el13a2w 1:c720fcb68396 173 }
el13a2w 1:c720fcb68396 174 } else {
el13a2w 1:c720fcb68396 175 lcd.drawRect(1,1,44,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 176 }
el13a2w 0:b6b1dc0389cb 177 } else {
el13a2w 0:b6b1dc0389cb 178 serial.printf("%s, %.0f cm\n",buffer, distance);
el13a2w 1:c720fcb68396 179 float length = sprintf(buffer,"D = %.2f cm",distance);
el13a2w 1:c720fcb68396 180 if (dFlag) {
el13a2w 1:c720fcb68396 181 if (length <= 14) {
el13a2w 1:c720fcb68396 182 lcd.printString(buffer,7,1);
el13a2w 1:c720fcb68396 183 }
el13a2w 1:c720fcb68396 184 } else {
el13a2w 1:c720fcb68396 185 lcd.drawRect(1,1,44,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 186 }
el13a2w 0:b6b1dc0389cb 187 }
el13a2w 1:c720fcb68396 188 serial.printf("Rate = 0.1\n");
el13a2w 0:b6b1dc0389cb 189 warning();
el13a2w 0:b6b1dc0389cb 190 }
el13a2w 0:b6b1dc0389cb 191 } else if (distance<120) {
el13a2w 0:b6b1dc0389cb 192 if (timer2Flag) {
el13a2w 0:b6b1dc0389cb 193 timer5Flag = 0;
el13a2w 0:b6b1dc0389cb 194 timer4Flag = 0;
el13a2w 0:b6b1dc0389cb 195 timer3Flag = 0;
el13a2w 0:b6b1dc0389cb 196 timer2Flag = 0;
el13a2w 0:b6b1dc0389cb 197 timer1Flag = 0;
el13a2w 0:b6b1dc0389cb 198 if (uFlag) {
el13a2w 0:b6b1dc0389cb 199 float mdistance = distance/100;
el13a2w 0:b6b1dc0389cb 200 serial.printf("%s, %.2f m\n",buffer, mdistance);
el13a2w 1:c720fcb68396 201 float length = sprintf(buffer,"D = %.2f m",mdistance);
el13a2w 1:c720fcb68396 202 if (dFlag) {
el13a2w 1:c720fcb68396 203 if (length <= 14) {
el13a2w 1:c720fcb68396 204 lcd.printString(buffer,7,1);
el13a2w 1:c720fcb68396 205 }
el13a2w 1:c720fcb68396 206 } else {
el13a2w 1:c720fcb68396 207 lcd.drawRect(1,1,24,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 208 }
el13a2w 0:b6b1dc0389cb 209 } else {
el13a2w 0:b6b1dc0389cb 210 serial.printf("%s, %.0f cm\n",buffer, distance);
el13a2w 1:c720fcb68396 211 float length = sprintf(buffer,"D = %.2f cm",distance);
el13a2w 1:c720fcb68396 212 if (dFlag) {
el13a2w 1:c720fcb68396 213 if (length <= 14) {
el13a2w 1:c720fcb68396 214 lcd.printString(buffer,7,1);
el13a2w 1:c720fcb68396 215 }
el13a2w 1:c720fcb68396 216 } else {
el13a2w 1:c720fcb68396 217 lcd.drawRect(1,1,24,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 218 }
el13a2w 0:b6b1dc0389cb 219 }
el13a2w 1:c720fcb68396 220 serial.printf("Rate = 0.1\n");
el13a2w 0:b6b1dc0389cb 221 warning();
el13a2w 0:b6b1dc0389cb 222 }
el13a2w 0:b6b1dc0389cb 223 } else {
el13a2w 0:b6b1dc0389cb 224 if (timer1Flag) {
el13a2w 0:b6b1dc0389cb 225 timer5Flag = 0;
el13a2w 0:b6b1dc0389cb 226 timer4Flag = 0;
el13a2w 0:b6b1dc0389cb 227 timer3Flag = 0;
el13a2w 0:b6b1dc0389cb 228 timer2Flag = 0;
el13a2w 0:b6b1dc0389cb 229 timer1Flag = 0;
el13a2w 0:b6b1dc0389cb 230 if (uFlag) {
el13a2w 0:b6b1dc0389cb 231 float mdistance = distance/100;
el13a2w 0:b6b1dc0389cb 232 serial.printf("%s, %.2f m\n",buffer, mdistance);
el13a2w 1:c720fcb68396 233 float length = sprintf(buffer,"D = %.2f m",mdistance);
el13a2w 1:c720fcb68396 234 if (dFlag) {
el13a2w 1:c720fcb68396 235 if (length <= 14) {
el13a2w 1:c720fcb68396 236 lcd.printString(buffer,7,1);
el13a2w 1:c720fcb68396 237 }
el13a2w 1:c720fcb68396 238 } else {
el13a2w 1:c720fcb68396 239 lcd.drawRect(1,1,4,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 240 }
el13a2w 0:b6b1dc0389cb 241 } else {
el13a2w 0:b6b1dc0389cb 242 serial.printf("%s, %.0f cm\n",buffer, distance);
el13a2w 1:c720fcb68396 243 float length = sprintf(buffer,"D = %.2f cm",distance);
el13a2w 1:c720fcb68396 244 if (dFlag) {
el13a2w 1:c720fcb68396 245 if (length <= 14) {
el13a2w 1:c720fcb68396 246 lcd.printString(buffer,7,1);
el13a2w 1:c720fcb68396 247 }
el13a2w 1:c720fcb68396 248 } else {
el13a2w 1:c720fcb68396 249 lcd.drawRect(1,1,4,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 250 }
el13a2w 0:b6b1dc0389cb 251 }
el13a2w 1:c720fcb68396 252 serial.printf("Rate = 0.1\n");
el13a2w 0:b6b1dc0389cb 253 warning();
el13a2w 0:b6b1dc0389cb 254 }
el13a2w 0:b6b1dc0389cb 255 }
el13a2w 0:b6b1dc0389cb 256 if (setTimeFlag) { // if updated time has been sent
el13a2w 0:b6b1dc0389cb 257 setTimeFlag = 0; // clear flag
el13a2w 0:b6b1dc0389cb 258 setTime(); // update time
el13a2w 0:b6b1dc0389cb 259 }
el13a2w 0:b6b1dc0389cb 260 Sleep();
el13a2w 0:b6b1dc0389cb 261 }
el13a2w 0:b6b1dc0389cb 262 }
el13a2w 0:b6b1dc0389cb 263
el13a2w 0:b6b1dc0389cb 264
el13a2w 0:b6b1dc0389cb 265 void timer1Expired()
el13a2w 0:b6b1dc0389cb 266 {
el13a2w 0:b6b1dc0389cb 267 timer1Flag = 1;
el13a2w 0:b6b1dc0389cb 268 }
el13a2w 0:b6b1dc0389cb 269
el13a2w 0:b6b1dc0389cb 270 void timer2Expired()
el13a2w 0:b6b1dc0389cb 271 {
el13a2w 0:b6b1dc0389cb 272 timer2Flag = 1;
el13a2w 0:b6b1dc0389cb 273 }
el13a2w 0:b6b1dc0389cb 274
el13a2w 0:b6b1dc0389cb 275 void timer3Expired()
el13a2w 0:b6b1dc0389cb 276 {
el13a2w 0:b6b1dc0389cb 277 timer3Flag = 1;
el13a2w 0:b6b1dc0389cb 278 }
el13a2w 0:b6b1dc0389cb 279
el13a2w 0:b6b1dc0389cb 280 void timer4Expired()
el13a2w 0:b6b1dc0389cb 281 {
el13a2w 0:b6b1dc0389cb 282 timer4Flag = 1;
el13a2w 0:b6b1dc0389cb 283 }
el13a2w 0:b6b1dc0389cb 284
el13a2w 0:b6b1dc0389cb 285 void timer5Expired()
el13a2w 0:b6b1dc0389cb 286 {
el13a2w 0:b6b1dc0389cb 287 timer5Flag = 1;
el13a2w 0:b6b1dc0389cb 288 }
el13a2w 0:b6b1dc0389cb 289
el13a2w 0:b6b1dc0389cb 290 float measureDistance()
el13a2w 0:b6b1dc0389cb 291 {
el13a2w 0:b6b1dc0389cb 292 float d1 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 293 float d2 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 294 float d3 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 295 float d4 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 296 float d5 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 297 float d6 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 298 float d7 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 299 float d8 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 300 float d9 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 301 float d10 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 302 float dt = (d1+d2+d3+d4+d5+d6+d7+d8+d9+d10)/10;
el13a2w 0:b6b1dc0389cb 303 return dt;
el13a2w 0:b6b1dc0389cb 304 }
el13a2w 0:b6b1dc0389cb 305
el13a2w 0:b6b1dc0389cb 306 void setTime()
el13a2w 0:b6b1dc0389cb 307 {
el13a2w 0:b6b1dc0389cb 308 // print time for debugging
el13a2w 0:b6b1dc0389cb 309 serial.printf("set_time - %s",rxString);
el13a2w 0:b6b1dc0389cb 310 // atoi() converts a string to an integer
el13a2w 0:b6b1dc0389cb 311 int time = atoi(rxString);
el13a2w 0:b6b1dc0389cb 312 // update the time
el13a2w 0:b6b1dc0389cb 313 set_time(time);
el13a2w 0:b6b1dc0389cb 314 }
el13a2w 0:b6b1dc0389cb 315 void serialISR()
el13a2w 0:b6b1dc0389cb 316 {
el13a2w 0:b6b1dc0389cb 317 // when a serial interrupt occurs, read rx string into buffer
el13a2w 0:b6b1dc0389cb 318 serial.gets(rxString,30);
el13a2w 0:b6b1dc0389cb 319 // set flag
el13a2w 0:b6b1dc0389cb 320 setTimeFlag = 1;
el13a2w 0:b6b1dc0389cb 321 }
el13a2w 0:b6b1dc0389cb 322
el13a2w 0:b6b1dc0389cb 323 void uPressed() // toggle direction in ISR
el13a2w 0:b6b1dc0389cb 324 {
el13a2w 0:b6b1dc0389cb 325 uFlag = !uFlag;
el13a2w 0:b6b1dc0389cb 326 }
el13a2w 0:b6b1dc0389cb 327
el13a2w 0:b6b1dc0389cb 328 void dPressed() // toggle direction in ISR
el13a2w 0:b6b1dc0389cb 329 {
el13a2w 0:b6b1dc0389cb 330 dFlag = !dFlag;
el13a2w 0:b6b1dc0389cb 331 wait (0.2);
el13a2w 0:b6b1dc0389cb 332 }
el13a2w 0:b6b1dc0389cb 333
el13a2w 0:b6b1dc0389cb 334 void warning()
el13a2w 0:b6b1dc0389cb 335 {
el13a2w 1:c720fcb68396 336 float vol = pot.read()/5;
el13a2w 0:b6b1dc0389cb 337 led2 = !led2;
el13a2w 1:c720fcb68396 338 buzzer = vol+0.8;
el13a2w 0:b6b1dc0389cb 339 }
el13a2w 0:b6b1dc0389cb 340
el13a2w 0:b6b1dc0389cb 341 void writeDataToFile(char* buffer, float distance)
el13a2w 0:b6b1dc0389cb 342 {
el13a2w 1:c720fcb68396 343 leds = 1; // turn on LEDs for feedback
el13a2w 0:b6b1dc0389cb 344 FILE *fp = fopen("/local/log.csv", "a"); // open 'log.csv' for appending
el13a2w 0:b6b1dc0389cb 345 // if the file doesn't exist it is created, if it exists, data is appended to the end
el13a2w 0:b6b1dc0389cb 346 fprintf(fp,"%s, %.2f\n",buffer, distance); // print string to file
el13a2w 0:b6b1dc0389cb 347 serial.printf("Data Logged\n\r");
el13a2w 0:b6b1dc0389cb 348 fclose(fp); // close file
el13a2w 0:b6b1dc0389cb 349 leds = 0; // turn off LEDs to signify file access has finished
el13a2w 0:b6b1dc0389cb 350 }