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:38:27 2015 +0000
Revision:
2:272d9de9f37e
Parent:
1:c720fcb68396
Child:
3:012cdc8e0f75
3

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 2:272d9de9f37e 77 char buffer1[14]; // buffer used to store distance for LCD
el13a2w 2:272d9de9f37e 78 char buffer2[14]; // buffer used to store time for LCD
el13a2w 2:272d9de9f37e 79 char buffer3[14]; // buffer used to store month/date for LCD
el13a2w 0:b6b1dc0389cb 80 set_time(0); // initialise time to 1st January 1970
el13a2w 0:b6b1dc0389cb 81 led1 = 1;
el13a2w 1:c720fcb68396 82
el13a2w 0:b6b1dc0389cb 83 while(1) {
el13a2w 1:c720fcb68396 84 lcd.normalMode(); // normal colour mode
el13a2w 1:c720fcb68396 85 lcd.setBrightness(0.5); // put LED backlight on 50%
el13a2w 0:b6b1dc0389cb 86 led2 = 0;
el13a2w 0:b6b1dc0389cb 87 buzzer = 0;
el13a2w 0:b6b1dc0389cb 88 buzzer.period(0.001);
el13a2w 0:b6b1dc0389cb 89 float distance = measureDistance();
el13a2w 0:b6b1dc0389cb 90 time_t seconds = time(NULL); // get current time
el13a2w 0:b6b1dc0389cb 91 // format time into a string (time and date)
el13a2w 1:c720fcb68396 92 strftime(buffer, 30 , "%b %d, %X", localtime(&seconds));
el13a2w 2:272d9de9f37e 93 strftime(buffer2, 14 , "%X", localtime(&seconds));
el13a2w 2:272d9de9f37e 94 strftime(buffer3, 14 , "%b %d", localtime(&seconds));
el13a2w 1:c720fcb68396 95 /*if (dFlag) {
el13a2w 1:c720fcb68396 96 writeDataToFile(buffer, distance); // write current value to disk
el13a2w 1:c720fcb68396 97 }*/
el13a2w 1:c720fcb68396 98 lcd.clear();
el13a2w 1:c720fcb68396 99 lcd.init(); // initialise display
el13a2w 0:b6b1dc0389cb 100 if (distance<30) {
el13a2w 0:b6b1dc0389cb 101 if (timer5Flag) {
el13a2w 0:b6b1dc0389cb 102 timer5Flag = 0;
el13a2w 0:b6b1dc0389cb 103 timer4Flag = 0;
el13a2w 0:b6b1dc0389cb 104 timer3Flag = 0;
el13a2w 0:b6b1dc0389cb 105 timer2Flag = 0;
el13a2w 0:b6b1dc0389cb 106 timer1Flag = 0;
el13a2w 0:b6b1dc0389cb 107 if (uFlag) {
el13a2w 0:b6b1dc0389cb 108 float mdistance = distance/100;
el13a2w 0:b6b1dc0389cb 109 serial.printf("%s, %.2f m\n",buffer, mdistance);
el13a2w 2:272d9de9f37e 110 float length = sprintf(buffer1,"D = %.2f m",mdistance);
el13a2w 2:272d9de9f37e 111 float length1 = sprintf(buffer2,"%s",buffer2);
el13a2w 2:272d9de9f37e 112 float length2 = sprintf(buffer3,"%s",buffer3);
el13a2w 1:c720fcb68396 113 if (dFlag) {
el13a2w 1:c720fcb68396 114 if (length <= 14) {
el13a2w 2:272d9de9f37e 115 if (length1 <= 14) {
el13a2w 2:272d9de9f37e 116 if (length2 <= 14) {
el13a2w 2:272d9de9f37e 117 lcd.printString(buffer1,3,1);
el13a2w 2:272d9de9f37e 118 lcd.printString(buffer2,18,4);
el13a2w 2:272d9de9f37e 119 lcd.printString(buffer3,24,3);
el13a2w 2:272d9de9f37e 120 }
el13a2w 2:272d9de9f37e 121 }
el13a2w 1:c720fcb68396 122 }
el13a2w 1:c720fcb68396 123 } else {
el13a2w 1:c720fcb68396 124 lcd.drawRect(1,1,84,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 125 }
el13a2w 0:b6b1dc0389cb 126 } else {
el13a2w 0:b6b1dc0389cb 127 serial.printf("%s, %.0f cm\n",buffer, distance);
el13a2w 2:272d9de9f37e 128 float length = sprintf(buffer1,"D = %.2f cm",distance);
el13a2w 2:272d9de9f37e 129 float length1 = sprintf(buffer2,"%s",buffer2);
el13a2w 2:272d9de9f37e 130 float length2 = sprintf(buffer3,"%s",buffer3);
el13a2w 1:c720fcb68396 131 if (dFlag) {
el13a2w 1:c720fcb68396 132 if (length <= 14) {
el13a2w 2:272d9de9f37e 133 if (length1 <= 14) {
el13a2w 2:272d9de9f37e 134 if (length2 <= 14) {
el13a2w 2:272d9de9f37e 135 lcd.printString(buffer1,3,1);
el13a2w 2:272d9de9f37e 136 lcd.printString(buffer2,18,4);
el13a2w 2:272d9de9f37e 137 lcd.printString(buffer3,24,3);
el13a2w 2:272d9de9f37e 138 }
el13a2w 2:272d9de9f37e 139 }
el13a2w 1:c720fcb68396 140 }
el13a2w 1:c720fcb68396 141 } else {
el13a2w 1:c720fcb68396 142 lcd.drawRect(1,1,84,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 143 }
el13a2w 0:b6b1dc0389cb 144 }
el13a2w 0:b6b1dc0389cb 145 serial.printf("Rate = 0.1\n");
el13a2w 0:b6b1dc0389cb 146 warning();
el13a2w 0:b6b1dc0389cb 147 }
el13a2w 0:b6b1dc0389cb 148 } else if (distance<60) {
el13a2w 0:b6b1dc0389cb 149 if (timer4Flag) {
el13a2w 0:b6b1dc0389cb 150 timer5Flag = 0;
el13a2w 0:b6b1dc0389cb 151 timer4Flag = 0;
el13a2w 0:b6b1dc0389cb 152 timer3Flag = 0;
el13a2w 0:b6b1dc0389cb 153 timer2Flag = 0;
el13a2w 0:b6b1dc0389cb 154 timer1Flag = 0;
el13a2w 0:b6b1dc0389cb 155 if (uFlag) {
el13a2w 0:b6b1dc0389cb 156 float mdistance = distance/100;
el13a2w 0:b6b1dc0389cb 157 serial.printf("%s, %.2f m\n",buffer, mdistance);
el13a2w 2:272d9de9f37e 158 float length = sprintf(buffer1,"D = %.2f m",mdistance);
el13a2w 2:272d9de9f37e 159 float length1 = sprintf(buffer2,"%s",buffer2);
el13a2w 2:272d9de9f37e 160 float length2 = sprintf(buffer3,"%s",buffer3);
el13a2w 1:c720fcb68396 161 if (dFlag) {
el13a2w 1:c720fcb68396 162 if (length <= 14) {
el13a2w 2:272d9de9f37e 163 if (length1 <= 14) {
el13a2w 2:272d9de9f37e 164 if (length2 <= 14) {
el13a2w 2:272d9de9f37e 165 lcd.printString(buffer1,3,1);
el13a2w 2:272d9de9f37e 166 lcd.printString(buffer2,18,4);
el13a2w 2:272d9de9f37e 167 lcd.printString(buffer3,24,3);
el13a2w 2:272d9de9f37e 168 }
el13a2w 2:272d9de9f37e 169 }
el13a2w 1:c720fcb68396 170 }
el13a2w 1:c720fcb68396 171 } else {
el13a2w 1:c720fcb68396 172 lcd.drawRect(1,1,64,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 173 }
el13a2w 0:b6b1dc0389cb 174 } else {
el13a2w 0:b6b1dc0389cb 175 serial.printf("%s, %.0f cm\n",buffer, distance);
el13a2w 2:272d9de9f37e 176 float length = sprintf(buffer1,"D = %.2f cm",distance);
el13a2w 2:272d9de9f37e 177 float length1 = sprintf(buffer2,"%s",buffer2);
el13a2w 2:272d9de9f37e 178 float length2 = sprintf(buffer3,"%s",buffer3);
el13a2w 1:c720fcb68396 179 if (dFlag) {
el13a2w 1:c720fcb68396 180 if (length <= 14) {
el13a2w 2:272d9de9f37e 181 if (length1 <= 14) {
el13a2w 2:272d9de9f37e 182 if (length2 <= 14) {
el13a2w 2:272d9de9f37e 183 lcd.printString(buffer1,3,1);
el13a2w 2:272d9de9f37e 184 lcd.printString(buffer2,18,4);
el13a2w 2:272d9de9f37e 185 lcd.printString(buffer3,24,3);
el13a2w 2:272d9de9f37e 186 }
el13a2w 2:272d9de9f37e 187 }
el13a2w 1:c720fcb68396 188 }
el13a2w 1:c720fcb68396 189 } else {
el13a2w 1:c720fcb68396 190 lcd.drawRect(1,1,64,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 191 }
el13a2w 0:b6b1dc0389cb 192 }
el13a2w 1:c720fcb68396 193 serial.printf("Rate = 0.1\n");
el13a2w 0:b6b1dc0389cb 194 warning();
el13a2w 0:b6b1dc0389cb 195 }
el13a2w 0:b6b1dc0389cb 196 } else if (distance<90) {
el13a2w 0:b6b1dc0389cb 197 if (timer3Flag) {
el13a2w 0:b6b1dc0389cb 198 timer5Flag = 0;
el13a2w 0:b6b1dc0389cb 199 timer4Flag = 0;
el13a2w 0:b6b1dc0389cb 200 timer3Flag = 0;
el13a2w 0:b6b1dc0389cb 201 timer2Flag = 0;
el13a2w 0:b6b1dc0389cb 202 timer1Flag = 0;
el13a2w 0:b6b1dc0389cb 203 if (uFlag) {
el13a2w 0:b6b1dc0389cb 204 float mdistance = distance/100;
el13a2w 0:b6b1dc0389cb 205 serial.printf("%s, %.2f m\n",buffer, mdistance);
el13a2w 2:272d9de9f37e 206 float length = sprintf(buffer1,"D = %.2f m",mdistance);
el13a2w 2:272d9de9f37e 207 float length1 = sprintf(buffer2,"%s",buffer2);
el13a2w 2:272d9de9f37e 208 float length2 = sprintf(buffer3,"%s",buffer3);
el13a2w 1:c720fcb68396 209 if (dFlag) {
el13a2w 1:c720fcb68396 210 if (length <= 14) {
el13a2w 2:272d9de9f37e 211 if (length1 <= 14) {
el13a2w 2:272d9de9f37e 212 if (length2 <= 14) {
el13a2w 2:272d9de9f37e 213 lcd.printString(buffer1,3,1);
el13a2w 2:272d9de9f37e 214 lcd.printString(buffer2,18,4);
el13a2w 2:272d9de9f37e 215 lcd.printString(buffer3,24,3);
el13a2w 2:272d9de9f37e 216 }
el13a2w 2:272d9de9f37e 217 }
el13a2w 1:c720fcb68396 218 }
el13a2w 1:c720fcb68396 219 } else {
el13a2w 1:c720fcb68396 220 lcd.drawRect(1,1,44,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 221 }
el13a2w 0:b6b1dc0389cb 222 } else {
el13a2w 0:b6b1dc0389cb 223 serial.printf("%s, %.0f cm\n",buffer, distance);
el13a2w 2:272d9de9f37e 224 float length = sprintf(buffer1,"D = %.2f cm",distance);
el13a2w 2:272d9de9f37e 225 float length1 = sprintf(buffer2,"%s",buffer2);
el13a2w 2:272d9de9f37e 226 float length2 = sprintf(buffer3,"%s",buffer3);
el13a2w 1:c720fcb68396 227 if (dFlag) {
el13a2w 1:c720fcb68396 228 if (length <= 14) {
el13a2w 2:272d9de9f37e 229 if (length1 <= 14) {
el13a2w 2:272d9de9f37e 230 if (length2 <= 14) {
el13a2w 2:272d9de9f37e 231 lcd.printString(buffer1,3,1);
el13a2w 2:272d9de9f37e 232 lcd.printString(buffer2,18,4);
el13a2w 2:272d9de9f37e 233 lcd.printString(buffer3,24,3);
el13a2w 2:272d9de9f37e 234 }
el13a2w 2:272d9de9f37e 235 }
el13a2w 1:c720fcb68396 236 }
el13a2w 1:c720fcb68396 237 } else {
el13a2w 1:c720fcb68396 238 lcd.drawRect(1,1,44,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 239 }
el13a2w 0:b6b1dc0389cb 240 }
el13a2w 1:c720fcb68396 241 serial.printf("Rate = 0.1\n");
el13a2w 0:b6b1dc0389cb 242 warning();
el13a2w 0:b6b1dc0389cb 243 }
el13a2w 0:b6b1dc0389cb 244 } else if (distance<120) {
el13a2w 0:b6b1dc0389cb 245 if (timer2Flag) {
el13a2w 0:b6b1dc0389cb 246 timer5Flag = 0;
el13a2w 0:b6b1dc0389cb 247 timer4Flag = 0;
el13a2w 0:b6b1dc0389cb 248 timer3Flag = 0;
el13a2w 0:b6b1dc0389cb 249 timer2Flag = 0;
el13a2w 0:b6b1dc0389cb 250 timer1Flag = 0;
el13a2w 0:b6b1dc0389cb 251 if (uFlag) {
el13a2w 0:b6b1dc0389cb 252 float mdistance = distance/100;
el13a2w 2:272d9de9f37e 253 serial.printf("%s, %.2f m\n",buffer1, mdistance);
el13a2w 1:c720fcb68396 254 float length = sprintf(buffer,"D = %.2f m",mdistance);
el13a2w 2:272d9de9f37e 255 float length1 = sprintf(buffer2,"%s",buffer2);
el13a2w 2:272d9de9f37e 256 float length2 = sprintf(buffer3,"%s",buffer3);
el13a2w 1:c720fcb68396 257 if (dFlag) {
el13a2w 1:c720fcb68396 258 if (length <= 14) {
el13a2w 2:272d9de9f37e 259 if (length1 <= 14) {
el13a2w 2:272d9de9f37e 260 if (length2 <= 14) {
el13a2w 2:272d9de9f37e 261 lcd.printString(buffer1,3,1);
el13a2w 2:272d9de9f37e 262 lcd.printString(buffer2,18,4);
el13a2w 2:272d9de9f37e 263 lcd.printString(buffer3,24,3);
el13a2w 2:272d9de9f37e 264 }
el13a2w 2:272d9de9f37e 265 }
el13a2w 1:c720fcb68396 266 }
el13a2w 1:c720fcb68396 267 } else {
el13a2w 1:c720fcb68396 268 lcd.drawRect(1,1,24,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 269 }
el13a2w 0:b6b1dc0389cb 270 } else {
el13a2w 0:b6b1dc0389cb 271 serial.printf("%s, %.0f cm\n",buffer, distance);
el13a2w 2:272d9de9f37e 272 float length = sprintf(buffer1,"D = %.2f cm",distance);
el13a2w 2:272d9de9f37e 273 float length1 = sprintf(buffer2,"%s",buffer2);
el13a2w 2:272d9de9f37e 274 float length2 = sprintf(buffer3,"%s",buffer3);
el13a2w 1:c720fcb68396 275 if (dFlag) {
el13a2w 1:c720fcb68396 276 if (length <= 14) {
el13a2w 2:272d9de9f37e 277 if (length1 <= 14) {
el13a2w 2:272d9de9f37e 278 if (length2 <= 14) {
el13a2w 2:272d9de9f37e 279 lcd.printString(buffer1,3,1);
el13a2w 2:272d9de9f37e 280 lcd.printString(buffer2,18,4);
el13a2w 2:272d9de9f37e 281 lcd.printString(buffer3,24,3);
el13a2w 2:272d9de9f37e 282 }
el13a2w 2:272d9de9f37e 283 }
el13a2w 1:c720fcb68396 284 }
el13a2w 1:c720fcb68396 285 } else {
el13a2w 1:c720fcb68396 286 lcd.drawRect(1,1,24,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 287 }
el13a2w 0:b6b1dc0389cb 288 }
el13a2w 1:c720fcb68396 289 serial.printf("Rate = 0.1\n");
el13a2w 0:b6b1dc0389cb 290 warning();
el13a2w 0:b6b1dc0389cb 291 }
el13a2w 0:b6b1dc0389cb 292 } else {
el13a2w 0:b6b1dc0389cb 293 if (timer1Flag) {
el13a2w 0:b6b1dc0389cb 294 timer5Flag = 0;
el13a2w 0:b6b1dc0389cb 295 timer4Flag = 0;
el13a2w 0:b6b1dc0389cb 296 timer3Flag = 0;
el13a2w 0:b6b1dc0389cb 297 timer2Flag = 0;
el13a2w 0:b6b1dc0389cb 298 timer1Flag = 0;
el13a2w 0:b6b1dc0389cb 299 if (uFlag) {
el13a2w 0:b6b1dc0389cb 300 float mdistance = distance/100;
el13a2w 0:b6b1dc0389cb 301 serial.printf("%s, %.2f m\n",buffer, mdistance);
el13a2w 2:272d9de9f37e 302 float length = sprintf(buffer1,"D = %.2f m",mdistance);
el13a2w 2:272d9de9f37e 303 float length1 = sprintf(buffer2,"%s",buffer2);
el13a2w 2:272d9de9f37e 304 float length2 = sprintf(buffer3,"%s",buffer3);
el13a2w 1:c720fcb68396 305 if (dFlag) {
el13a2w 1:c720fcb68396 306 if (length <= 14) {
el13a2w 2:272d9de9f37e 307 if (length1 <= 14) {
el13a2w 2:272d9de9f37e 308 if (length2 <= 14) {
el13a2w 2:272d9de9f37e 309 lcd.printString(buffer1,3,1);
el13a2w 2:272d9de9f37e 310 lcd.printString(buffer2,18,4);
el13a2w 2:272d9de9f37e 311 lcd.printString(buffer3,24,3);
el13a2w 2:272d9de9f37e 312 }
el13a2w 2:272d9de9f37e 313 }
el13a2w 1:c720fcb68396 314 }
el13a2w 1:c720fcb68396 315 } else {
el13a2w 1:c720fcb68396 316 lcd.drawRect(1,1,4,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 317 }
el13a2w 0:b6b1dc0389cb 318 } else {
el13a2w 0:b6b1dc0389cb 319 serial.printf("%s, %.0f cm\n",buffer, distance);
el13a2w 2:272d9de9f37e 320 float length = sprintf(buffer1,"D = %.2f cm",distance);
el13a2w 2:272d9de9f37e 321 float length1 = sprintf(buffer2,"%s",buffer2);
el13a2w 2:272d9de9f37e 322 float length2 = sprintf(buffer3,"%s",buffer3);
el13a2w 1:c720fcb68396 323 if (dFlag) {
el13a2w 1:c720fcb68396 324 if (length <= 14) {
el13a2w 2:272d9de9f37e 325 if (length1 <= 14) {
el13a2w 2:272d9de9f37e 326 if (length2 <= 14) {
el13a2w 2:272d9de9f37e 327 lcd.printString(buffer1,3,1);
el13a2w 2:272d9de9f37e 328 lcd.printString(buffer2,18,4);
el13a2w 2:272d9de9f37e 329 lcd.printString(buffer3,24,3);
el13a2w 2:272d9de9f37e 330 }
el13a2w 2:272d9de9f37e 331 }
el13a2w 1:c720fcb68396 332 }
el13a2w 1:c720fcb68396 333 } else {
el13a2w 1:c720fcb68396 334 lcd.drawRect(1,1,4,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 335 }
el13a2w 0:b6b1dc0389cb 336 }
el13a2w 1:c720fcb68396 337 serial.printf("Rate = 0.1\n");
el13a2w 0:b6b1dc0389cb 338 warning();
el13a2w 0:b6b1dc0389cb 339 }
el13a2w 0:b6b1dc0389cb 340 }
el13a2w 0:b6b1dc0389cb 341 if (setTimeFlag) { // if updated time has been sent
el13a2w 0:b6b1dc0389cb 342 setTimeFlag = 0; // clear flag
el13a2w 0:b6b1dc0389cb 343 setTime(); // update time
el13a2w 0:b6b1dc0389cb 344 }
el13a2w 0:b6b1dc0389cb 345 Sleep();
el13a2w 0:b6b1dc0389cb 346 }
el13a2w 0:b6b1dc0389cb 347 }
el13a2w 0:b6b1dc0389cb 348
el13a2w 0:b6b1dc0389cb 349
el13a2w 0:b6b1dc0389cb 350 void timer1Expired()
el13a2w 0:b6b1dc0389cb 351 {
el13a2w 0:b6b1dc0389cb 352 timer1Flag = 1;
el13a2w 0:b6b1dc0389cb 353 }
el13a2w 0:b6b1dc0389cb 354
el13a2w 0:b6b1dc0389cb 355 void timer2Expired()
el13a2w 0:b6b1dc0389cb 356 {
el13a2w 0:b6b1dc0389cb 357 timer2Flag = 1;
el13a2w 0:b6b1dc0389cb 358 }
el13a2w 0:b6b1dc0389cb 359
el13a2w 0:b6b1dc0389cb 360 void timer3Expired()
el13a2w 0:b6b1dc0389cb 361 {
el13a2w 0:b6b1dc0389cb 362 timer3Flag = 1;
el13a2w 0:b6b1dc0389cb 363 }
el13a2w 0:b6b1dc0389cb 364
el13a2w 0:b6b1dc0389cb 365 void timer4Expired()
el13a2w 0:b6b1dc0389cb 366 {
el13a2w 0:b6b1dc0389cb 367 timer4Flag = 1;
el13a2w 0:b6b1dc0389cb 368 }
el13a2w 0:b6b1dc0389cb 369
el13a2w 0:b6b1dc0389cb 370 void timer5Expired()
el13a2w 0:b6b1dc0389cb 371 {
el13a2w 0:b6b1dc0389cb 372 timer5Flag = 1;
el13a2w 0:b6b1dc0389cb 373 }
el13a2w 0:b6b1dc0389cb 374
el13a2w 0:b6b1dc0389cb 375 float measureDistance()
el13a2w 0:b6b1dc0389cb 376 {
el13a2w 0:b6b1dc0389cb 377 float d1 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 378 float d2 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 379 float d3 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 380 float d4 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 381 float d5 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 382 float d6 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 383 float d7 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 384 float d8 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 385 float d9 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 386 float d10 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 387 float dt = (d1+d2+d3+d4+d5+d6+d7+d8+d9+d10)/10;
el13a2w 0:b6b1dc0389cb 388 return dt;
el13a2w 0:b6b1dc0389cb 389 }
el13a2w 0:b6b1dc0389cb 390
el13a2w 0:b6b1dc0389cb 391 void setTime()
el13a2w 0:b6b1dc0389cb 392 {
el13a2w 0:b6b1dc0389cb 393 // print time for debugging
el13a2w 0:b6b1dc0389cb 394 serial.printf("set_time - %s",rxString);
el13a2w 0:b6b1dc0389cb 395 // atoi() converts a string to an integer
el13a2w 0:b6b1dc0389cb 396 int time = atoi(rxString);
el13a2w 0:b6b1dc0389cb 397 // update the time
el13a2w 0:b6b1dc0389cb 398 set_time(time);
el13a2w 0:b6b1dc0389cb 399 }
el13a2w 0:b6b1dc0389cb 400 void serialISR()
el13a2w 0:b6b1dc0389cb 401 {
el13a2w 0:b6b1dc0389cb 402 // when a serial interrupt occurs, read rx string into buffer
el13a2w 0:b6b1dc0389cb 403 serial.gets(rxString,30);
el13a2w 0:b6b1dc0389cb 404 // set flag
el13a2w 0:b6b1dc0389cb 405 setTimeFlag = 1;
el13a2w 0:b6b1dc0389cb 406 }
el13a2w 0:b6b1dc0389cb 407
el13a2w 0:b6b1dc0389cb 408 void uPressed() // toggle direction in ISR
el13a2w 0:b6b1dc0389cb 409 {
el13a2w 0:b6b1dc0389cb 410 uFlag = !uFlag;
el13a2w 0:b6b1dc0389cb 411 }
el13a2w 0:b6b1dc0389cb 412
el13a2w 0:b6b1dc0389cb 413 void dPressed() // toggle direction in ISR
el13a2w 0:b6b1dc0389cb 414 {
el13a2w 0:b6b1dc0389cb 415 dFlag = !dFlag;
el13a2w 0:b6b1dc0389cb 416 wait (0.2);
el13a2w 0:b6b1dc0389cb 417 }
el13a2w 0:b6b1dc0389cb 418
el13a2w 0:b6b1dc0389cb 419 void warning()
el13a2w 0:b6b1dc0389cb 420 {
el13a2w 1:c720fcb68396 421 float vol = pot.read()/5;
el13a2w 0:b6b1dc0389cb 422 led2 = !led2;
el13a2w 1:c720fcb68396 423 buzzer = vol+0.8;
el13a2w 0:b6b1dc0389cb 424 }
el13a2w 0:b6b1dc0389cb 425
el13a2w 0:b6b1dc0389cb 426 void writeDataToFile(char* buffer, float distance)
el13a2w 0:b6b1dc0389cb 427 {
el13a2w 1:c720fcb68396 428 leds = 1; // turn on LEDs for feedback
el13a2w 0:b6b1dc0389cb 429 FILE *fp = fopen("/local/log.csv", "a"); // open 'log.csv' for appending
el13a2w 0:b6b1dc0389cb 430 // if the file doesn't exist it is created, if it exists, data is appended to the end
el13a2w 0:b6b1dc0389cb 431 fprintf(fp,"%s, %.2f\n",buffer, distance); // print string to file
el13a2w 0:b6b1dc0389cb 432 serial.printf("Data Logged\n\r");
el13a2w 0:b6b1dc0389cb 433 fclose(fp); // close file
el13a2w 0:b6b1dc0389cb 434 leds = 0; // turn off LEDs to signify file access has finished
el13a2w 0:b6b1dc0389cb 435 }