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:
Sun May 10 10:29:49 2015 +0000
Revision:
5:c18bd289bc88
Parent:
4:880995b4a063
End product

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 3:012cdc8e0f75 6 #include "main.h"
el13a2w 0:b6b1dc0389cb 7
el13a2w 0:b6b1dc0389cb 8 int main()
el13a2w 0:b6b1dc0389cb 9 {
el13a2w 5:c18bd289bc88 10 PHY_PowerDown();
el13a2w 1:c720fcb68396 11 lcd.init(); // initialise display
el13a2w 3:012cdc8e0f75 12 lcd.printString("Ultrasonic", 13,1); // print string on row 1
el13a2w 3:012cdc8e0f75 13 lcd.printString("Sensor", 25,2); // print string on row 2
el13a2w 3:012cdc8e0f75 14 lcd.printString("Adrian Wong", 9,4); // print string on row 4
el13a2w 1:c720fcb68396 15 lcd.drawRect(1,1,81,45,0); // transparent, just outline
el13a2w 1:c720fcb68396 16 lcd.drawRect(5,26,28,2,1); // filled black rectangle
el13a2w 1:c720fcb68396 17 lcd.drawRect(51,26,28,2,1); // filled black rectangle
el13a2w 3:012cdc8e0f75 18 lcd.printString("X", 40,3); // print string on row 3
el13a2w 1:c720fcb68396 19 lcd.drawCircle(37,27,1,1); // x,y,radius,black fill
el13a2w 1:c720fcb68396 20 lcd.drawCircle(47,27,1,1); // x,y,radius,black fill
el13a2w 1:c720fcb68396 21 wait(1);
el13a2w 1:c720fcb68396 22 lcd.clear(); // Clear all pixels off display
el13a2w 0:b6b1dc0389cb 23 serial.baud(9600); // set baud rate
el13a2w 0:b6b1dc0389cb 24 unit.rise(&uPressed); // call ISR on rising edge (button pressed)
el13a2w 0:b6b1dc0389cb 25 display.rise(&dPressed); // call ISR on rising edge (button pressed)
el13a2w 5:c18bd289bc88 26 timer1.attach(&timer1Expired,1); // 1s timer
el13a2w 5:c18bd289bc88 27 timer2.attach(&timer2Expired,0.8); // 0.8s timer
el13a2w 5:c18bd289bc88 28 timer3.attach(&timer3Expired,0.6); // 0.6s timer
el13a2w 5:c18bd289bc88 29 timer4.attach(&timer4Expired,0.3); // 0.3s timer
el13a2w 3:012cdc8e0f75 30 timer5.attach(&timer5Expired,0.1); // 0.1s timer
el13a2w 0:b6b1dc0389cb 31 serial.attach(&serialISR); // attach serial ISR
el13a2w 1:c720fcb68396 32 char buffer[30]; // buffer used to store information
el13a2w 2:272d9de9f37e 33 char buffer1[14]; // buffer used to store distance for LCD
el13a2w 2:272d9de9f37e 34 char buffer2[14]; // buffer used to store time for LCD
el13a2w 2:272d9de9f37e 35 char buffer3[14]; // buffer used to store month/date for LCD
el13a2w 0:b6b1dc0389cb 36 led1 = 1;
el13a2w 1:c720fcb68396 37
el13a2w 0:b6b1dc0389cb 38 while(1) {
el13a2w 1:c720fcb68396 39 lcd.normalMode(); // normal colour mode
el13a2w 1:c720fcb68396 40 lcd.setBrightness(0.5); // put LED backlight on 50%
el13a2w 3:012cdc8e0f75 41 led2 = 0; // resets led2
el13a2w 3:012cdc8e0f75 42 buzzer = 0; // resets buzzer
el13a2w 3:012cdc8e0f75 43 buzzer.period(0.001); // sets buzzer pwm period
el13a2w 3:012cdc8e0f75 44 float distance = measureDistance(); // get the distance
el13a2w 0:b6b1dc0389cb 45 time_t seconds = time(NULL); // get current time
el13a2w 0:b6b1dc0389cb 46 // format time into a string (time and date)
el13a2w 3:012cdc8e0f75 47 strftime(buffer, 30 , "%b %d, %X", localtime(&seconds)); // set buffer to store time and date
el13a2w 3:012cdc8e0f75 48 strftime(buffer2, 14 , "%X", localtime(&seconds)); // set buffer2 to store time
el13a2w 3:012cdc8e0f75 49 strftime(buffer3, 14 , "%b %d", localtime(&seconds)); // set buffer3 to store date and month
el13a2w 5:c18bd289bc88 50
el13a2w 5:c18bd289bc88 51 writeDataToFile(buffer, distance); // write current value to disk
el13a2w 5:c18bd289bc88 52
el13a2w 3:012cdc8e0f75 53 lcd.clear(); // clear display
el13a2w 1:c720fcb68396 54 lcd.init(); // initialise display
el13a2w 0:b6b1dc0389cb 55 if (distance<30) {
el13a2w 0:b6b1dc0389cb 56 if (timer5Flag) {
el13a2w 3:012cdc8e0f75 57 timer5Flag = 0; // resets timer flag
el13a2w 3:012cdc8e0f75 58 timer4Flag = 0; // resets timer flag
el13a2w 3:012cdc8e0f75 59 timer3Flag = 0; // resets timer flag
el13a2w 3:012cdc8e0f75 60 timer2Flag = 0; // resets timer flag
el13a2w 3:012cdc8e0f75 61 timer1Flag = 0; // resets timer flag
el13a2w 0:b6b1dc0389cb 62 if (uFlag) {
el13a2w 3:012cdc8e0f75 63 float mdistance = distance/100; // get distance in metres
el13a2w 3:012cdc8e0f75 64 serial.printf("%s, %.2f m\n",buffer, mdistance); // print time then distance in metres
el13a2w 3:012cdc8e0f75 65 float length = sprintf(buffer1,"D = %.2f m",mdistance); // print distance on lcd
el13a2w 3:012cdc8e0f75 66 float length1 = sprintf(buffer2,"%s",buffer2); // print time
el13a2w 3:012cdc8e0f75 67 float length2 = sprintf(buffer3,"%s",buffer3); // print date and month
el13a2w 1:c720fcb68396 68 if (dFlag) {
el13a2w 1:c720fcb68396 69 if (length <= 14) {
el13a2w 2:272d9de9f37e 70 if (length1 <= 14) {
el13a2w 2:272d9de9f37e 71 if (length2 <= 14) {
el13a2w 3:012cdc8e0f75 72 lcd.printString(buffer1,3,1); // print on row 1
el13a2w 3:012cdc8e0f75 73 lcd.printString(buffer2,18,4); // print on row 4
el13a2w 3:012cdc8e0f75 74 lcd.printString(buffer3,24,3); // print on row 3
el13a2w 2:272d9de9f37e 75 }
el13a2w 2:272d9de9f37e 76 }
el13a2w 1:c720fcb68396 77 }
el13a2w 1:c720fcb68396 78 } else {
el13a2w 1:c720fcb68396 79 lcd.drawRect(1,1,84,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 80 }
el13a2w 0:b6b1dc0389cb 81 } else {
el13a2w 3:012cdc8e0f75 82 serial.printf("%s, %.0f cm\n",buffer, distance); // print time then distance in centimetres
el13a2w 3:012cdc8e0f75 83 float length = sprintf(buffer1,"D = %.2f cm",distance); // print distance on lcd
el13a2w 3:012cdc8e0f75 84 float length1 = sprintf(buffer2,"%s",buffer2); // print time
el13a2w 3:012cdc8e0f75 85 float length2 = sprintf(buffer3,"%s",buffer3); // print date and month
el13a2w 1:c720fcb68396 86 if (dFlag) {
el13a2w 1:c720fcb68396 87 if (length <= 14) {
el13a2w 2:272d9de9f37e 88 if (length1 <= 14) {
el13a2w 2:272d9de9f37e 89 if (length2 <= 14) {
el13a2w 3:012cdc8e0f75 90 lcd.printString(buffer1,3,1); // print on row 1
el13a2w 3:012cdc8e0f75 91 lcd.printString(buffer2,18,4); // print on row 4
el13a2w 3:012cdc8e0f75 92 lcd.printString(buffer3,24,3); // print on row 3
el13a2w 2:272d9de9f37e 93 }
el13a2w 2:272d9de9f37e 94 }
el13a2w 1:c720fcb68396 95 }
el13a2w 1:c720fcb68396 96 } else {
el13a2w 1:c720fcb68396 97 lcd.drawRect(1,1,84,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 98 }
el13a2w 0:b6b1dc0389cb 99 }
el13a2w 0:b6b1dc0389cb 100 serial.printf("Rate = 0.1\n");
el13a2w 0:b6b1dc0389cb 101 warning();
el13a2w 0:b6b1dc0389cb 102 }
el13a2w 0:b6b1dc0389cb 103 } else if (distance<60) {
el13a2w 0:b6b1dc0389cb 104 if (timer4Flag) {
el13a2w 3:012cdc8e0f75 105 timer5Flag = 0; // resets timer flag
el13a2w 3:012cdc8e0f75 106 timer4Flag = 0; // resets timer flag
el13a2w 3:012cdc8e0f75 107 timer3Flag = 0; // resets timer flag
el13a2w 3:012cdc8e0f75 108 timer2Flag = 0; // resets timer flag
el13a2w 3:012cdc8e0f75 109 timer1Flag = 0; // resets timer flag
el13a2w 0:b6b1dc0389cb 110 if (uFlag) {
el13a2w 3:012cdc8e0f75 111 float mdistance = distance/100; // get distance in metres
el13a2w 3:012cdc8e0f75 112 serial.printf("%s, %.2f m\n",buffer, mdistance); // print time then distance in metres
el13a2w 3:012cdc8e0f75 113 float length = sprintf(buffer1,"D = %.2f m",mdistance); // print distance on lcd
el13a2w 3:012cdc8e0f75 114 float length1 = sprintf(buffer2,"%s",buffer2); // print time
el13a2w 3:012cdc8e0f75 115 float length2 = sprintf(buffer3,"%s",buffer3); // print date and month
el13a2w 1:c720fcb68396 116 if (dFlag) {
el13a2w 1:c720fcb68396 117 if (length <= 14) {
el13a2w 2:272d9de9f37e 118 if (length1 <= 14) {
el13a2w 2:272d9de9f37e 119 if (length2 <= 14) {
el13a2w 3:012cdc8e0f75 120 lcd.printString(buffer1,3,1); // print on row 1
el13a2w 3:012cdc8e0f75 121 lcd.printString(buffer2,18,4); // print on row 4
el13a2w 3:012cdc8e0f75 122 lcd.printString(buffer3,24,3); // print on row 3
el13a2w 2:272d9de9f37e 123 }
el13a2w 2:272d9de9f37e 124 }
el13a2w 1:c720fcb68396 125 }
el13a2w 1:c720fcb68396 126 } else {
el13a2w 1:c720fcb68396 127 lcd.drawRect(1,1,64,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 128 }
el13a2w 0:b6b1dc0389cb 129 } else {
el13a2w 3:012cdc8e0f75 130 serial.printf("%s, %.0f cm\n",buffer, distance); // print time then distance in centimetres
el13a2w 3:012cdc8e0f75 131 float length = sprintf(buffer1,"D = %.2f cm",distance); // print distance on lcd
el13a2w 3:012cdc8e0f75 132 float length1 = sprintf(buffer2,"%s",buffer2); // print time
el13a2w 3:012cdc8e0f75 133 float length2 = sprintf(buffer3,"%s",buffer3); // print date and month
el13a2w 1:c720fcb68396 134 if (dFlag) {
el13a2w 1:c720fcb68396 135 if (length <= 14) {
el13a2w 2:272d9de9f37e 136 if (length1 <= 14) {
el13a2w 2:272d9de9f37e 137 if (length2 <= 14) {
el13a2w 3:012cdc8e0f75 138 lcd.printString(buffer1,3,1); // print on row 1
el13a2w 3:012cdc8e0f75 139 lcd.printString(buffer2,18,4); // print on row 4
el13a2w 3:012cdc8e0f75 140 lcd.printString(buffer3,24,3); // print on row 3
el13a2w 2:272d9de9f37e 141 }
el13a2w 2:272d9de9f37e 142 }
el13a2w 1:c720fcb68396 143 }
el13a2w 1:c720fcb68396 144 } else {
el13a2w 1:c720fcb68396 145 lcd.drawRect(1,1,64,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 146 }
el13a2w 0:b6b1dc0389cb 147 }
el13a2w 4:880995b4a063 148 serial.printf("Rate = 0.3\n");
el13a2w 0:b6b1dc0389cb 149 warning();
el13a2w 0:b6b1dc0389cb 150 }
el13a2w 0:b6b1dc0389cb 151 } else if (distance<90) {
el13a2w 0:b6b1dc0389cb 152 if (timer3Flag) {
el13a2w 3:012cdc8e0f75 153 timer5Flag = 0; // resets timer flag
el13a2w 3:012cdc8e0f75 154 timer4Flag = 0; // resets timer flag
el13a2w 3:012cdc8e0f75 155 timer3Flag = 0; // resets timer flag
el13a2w 3:012cdc8e0f75 156 timer2Flag = 0; // resets timer flag
el13a2w 3:012cdc8e0f75 157 timer1Flag = 0; // resets timer flag
el13a2w 0:b6b1dc0389cb 158 if (uFlag) {
el13a2w 3:012cdc8e0f75 159 float mdistance = distance/100; // get distance in metres
el13a2w 3:012cdc8e0f75 160 serial.printf("%s, %.2f m\n",buffer, mdistance); // print time then distance in metres
el13a2w 3:012cdc8e0f75 161 float length = sprintf(buffer1,"D = %.2f m",mdistance); // print distance on lcd
el13a2w 3:012cdc8e0f75 162 float length1 = sprintf(buffer2,"%s",buffer2); // print time
el13a2w 3:012cdc8e0f75 163 float length2 = sprintf(buffer3,"%s",buffer3); // print date and month
el13a2w 1:c720fcb68396 164 if (dFlag) {
el13a2w 1:c720fcb68396 165 if (length <= 14) {
el13a2w 2:272d9de9f37e 166 if (length1 <= 14) {
el13a2w 2:272d9de9f37e 167 if (length2 <= 14) {
el13a2w 3:012cdc8e0f75 168 lcd.printString(buffer1,3,1); // print on row 1
el13a2w 3:012cdc8e0f75 169 lcd.printString(buffer2,18,4); // print on row 4
el13a2w 3:012cdc8e0f75 170 lcd.printString(buffer3,24,3); // print on row 3
el13a2w 2:272d9de9f37e 171 }
el13a2w 2:272d9de9f37e 172 }
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 3:012cdc8e0f75 178 serial.printf("%s, %.0f cm\n",buffer, distance); // print time then distance in centimetres
el13a2w 3:012cdc8e0f75 179 float length = sprintf(buffer1,"D = %.2f cm",distance); // print distance on lcd
el13a2w 3:012cdc8e0f75 180 float length1 = sprintf(buffer2,"%s",buffer2); // print time
el13a2w 3:012cdc8e0f75 181 float length2 = sprintf(buffer3,"%s",buffer3); // print date and month
el13a2w 1:c720fcb68396 182 if (dFlag) {
el13a2w 1:c720fcb68396 183 if (length <= 14) {
el13a2w 2:272d9de9f37e 184 if (length1 <= 14) {
el13a2w 2:272d9de9f37e 185 if (length2 <= 14) {
el13a2w 3:012cdc8e0f75 186 lcd.printString(buffer1,3,1); // print on row 1
el13a2w 3:012cdc8e0f75 187 lcd.printString(buffer2,18,4); // print on row 4
el13a2w 3:012cdc8e0f75 188 lcd.printString(buffer3,24,3); // print on row 3
el13a2w 2:272d9de9f37e 189 }
el13a2w 2:272d9de9f37e 190 }
el13a2w 1:c720fcb68396 191 }
el13a2w 1:c720fcb68396 192 } else {
el13a2w 1:c720fcb68396 193 lcd.drawRect(1,1,44,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 194 }
el13a2w 0:b6b1dc0389cb 195 }
el13a2w 4:880995b4a063 196 serial.printf("Rate = 0.6\n");
el13a2w 0:b6b1dc0389cb 197 warning();
el13a2w 0:b6b1dc0389cb 198 }
el13a2w 0:b6b1dc0389cb 199 } else if (distance<120) {
el13a2w 0:b6b1dc0389cb 200 if (timer2Flag) {
el13a2w 3:012cdc8e0f75 201 timer5Flag = 0; // resets timer flag
el13a2w 3:012cdc8e0f75 202 timer4Flag = 0; // resets timer flag
el13a2w 3:012cdc8e0f75 203 timer3Flag = 0; // resets timer flag
el13a2w 3:012cdc8e0f75 204 timer2Flag = 0; // resets timer flag
el13a2w 3:012cdc8e0f75 205 timer1Flag = 0; // resets timer flag
el13a2w 0:b6b1dc0389cb 206 if (uFlag) {
el13a2w 3:012cdc8e0f75 207 float mdistance = distance/100; // get distance in metres
el13a2w 3:012cdc8e0f75 208 serial.printf("%s, %.2f m\n",buffer, mdistance); // print time then distance in metres
el13a2w 3:012cdc8e0f75 209 float length = sprintf(buffer1,"D = %.2f m",mdistance); // print distance on lcd
el13a2w 3:012cdc8e0f75 210 float length1 = sprintf(buffer2,"%s",buffer2); // print time
el13a2w 3:012cdc8e0f75 211 float length2 = sprintf(buffer3,"%s",buffer3); // print date and month
el13a2w 1:c720fcb68396 212 if (dFlag) {
el13a2w 1:c720fcb68396 213 if (length <= 14) {
el13a2w 2:272d9de9f37e 214 if (length1 <= 14) {
el13a2w 2:272d9de9f37e 215 if (length2 <= 14) {
el13a2w 3:012cdc8e0f75 216 lcd.printString(buffer1,3,1); // print on row 1
el13a2w 3:012cdc8e0f75 217 lcd.printString(buffer2,18,4); // print on row 4
el13a2w 3:012cdc8e0f75 218 lcd.printString(buffer3,24,3); // print on row 3
el13a2w 2:272d9de9f37e 219 }
el13a2w 2:272d9de9f37e 220 }
el13a2w 1:c720fcb68396 221 }
el13a2w 1:c720fcb68396 222 } else {
el13a2w 1:c720fcb68396 223 lcd.drawRect(1,1,24,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 224 }
el13a2w 0:b6b1dc0389cb 225 } else {
el13a2w 3:012cdc8e0f75 226 serial.printf("%s, %.0f cm\n",buffer, distance); // print time then distance in centimetres
el13a2w 3:012cdc8e0f75 227 float length = sprintf(buffer1,"D = %.2f cm",distance); // print distance on lcd
el13a2w 3:012cdc8e0f75 228 float length1 = sprintf(buffer2,"%s",buffer2); // print time
el13a2w 3:012cdc8e0f75 229 float length2 = sprintf(buffer3,"%s",buffer3); // print date and month
el13a2w 1:c720fcb68396 230 if (dFlag) {
el13a2w 1:c720fcb68396 231 if (length <= 14) {
el13a2w 2:272d9de9f37e 232 if (length1 <= 14) {
el13a2w 2:272d9de9f37e 233 if (length2 <= 14) {
el13a2w 3:012cdc8e0f75 234 lcd.printString(buffer1,3,1); // print on row 1
el13a2w 3:012cdc8e0f75 235 lcd.printString(buffer2,18,4); // print on row 4
el13a2w 3:012cdc8e0f75 236 lcd.printString(buffer3,24,3); // print on row 3
el13a2w 2:272d9de9f37e 237 }
el13a2w 2:272d9de9f37e 238 }
el13a2w 1:c720fcb68396 239 }
el13a2w 1:c720fcb68396 240 } else {
el13a2w 1:c720fcb68396 241 lcd.drawRect(1,1,24,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 242 }
el13a2w 0:b6b1dc0389cb 243 }
el13a2w 4:880995b4a063 244 serial.printf("Rate = 0.8\n");
el13a2w 0:b6b1dc0389cb 245 warning();
el13a2w 0:b6b1dc0389cb 246 }
el13a2w 0:b6b1dc0389cb 247 } else {
el13a2w 0:b6b1dc0389cb 248 if (timer1Flag) {
el13a2w 3:012cdc8e0f75 249 timer5Flag = 0; // resets timer flag
el13a2w 3:012cdc8e0f75 250 timer4Flag = 0; // resets timer flag
el13a2w 3:012cdc8e0f75 251 timer3Flag = 0; // resets timer flag
el13a2w 3:012cdc8e0f75 252 timer2Flag = 0; // resets timer flag
el13a2w 3:012cdc8e0f75 253 timer1Flag = 0; // resets timer flag
el13a2w 0:b6b1dc0389cb 254 if (uFlag) {
el13a2w 3:012cdc8e0f75 255 float mdistance = distance/100; // get distance in metres
el13a2w 3:012cdc8e0f75 256 serial.printf("%s, %.2f m\n",buffer, mdistance); // print time then distance in metres
el13a2w 3:012cdc8e0f75 257 float length = sprintf(buffer1,"D = %.2f m",mdistance); // print distance on lcd
el13a2w 3:012cdc8e0f75 258 float length1 = sprintf(buffer2,"%s",buffer2); // print time
el13a2w 3:012cdc8e0f75 259 float length2 = sprintf(buffer3,"%s",buffer3); // print date and month
el13a2w 1:c720fcb68396 260 if (dFlag) {
el13a2w 1:c720fcb68396 261 if (length <= 14) {
el13a2w 2:272d9de9f37e 262 if (length1 <= 14) {
el13a2w 2:272d9de9f37e 263 if (length2 <= 14) {
el13a2w 3:012cdc8e0f75 264 lcd.printString(buffer1,3,1); // print on row 1
el13a2w 3:012cdc8e0f75 265 lcd.printString(buffer2,18,4); // print on row 4
el13a2w 3:012cdc8e0f75 266 lcd.printString(buffer3,24,3); // print on row 3
el13a2w 2:272d9de9f37e 267 }
el13a2w 2:272d9de9f37e 268 }
el13a2w 1:c720fcb68396 269 }
el13a2w 1:c720fcb68396 270 } else {
el13a2w 1:c720fcb68396 271 lcd.drawRect(1,1,4,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 272 }
el13a2w 0:b6b1dc0389cb 273 } else {
el13a2w 3:012cdc8e0f75 274 serial.printf("%s, %.0f cm\n",buffer, distance); // print time then distance in centimetres
el13a2w 3:012cdc8e0f75 275 float length = sprintf(buffer1,"D = %.2f cm",distance); // print distance on lcd
el13a2w 3:012cdc8e0f75 276 float length1 = sprintf(buffer2,"%s",buffer2); // print time
el13a2w 3:012cdc8e0f75 277 float length2 = sprintf(buffer3,"%s",buffer3); // print date and month
el13a2w 1:c720fcb68396 278 if (dFlag) {
el13a2w 1:c720fcb68396 279 if (length <= 14) {
el13a2w 2:272d9de9f37e 280 if (length1 <= 14) {
el13a2w 2:272d9de9f37e 281 if (length2 <= 14) {
el13a2w 3:012cdc8e0f75 282 lcd.printString(buffer1,3,1); // print on row 1
el13a2w 3:012cdc8e0f75 283 lcd.printString(buffer2,18,4); // print on row 4
el13a2w 3:012cdc8e0f75 284 lcd.printString(buffer3,24,3); // print on row 3
el13a2w 2:272d9de9f37e 285 }
el13a2w 2:272d9de9f37e 286 }
el13a2w 1:c720fcb68396 287 }
el13a2w 1:c720fcb68396 288 } else {
el13a2w 1:c720fcb68396 289 lcd.drawRect(1,1,4,48,1); // filled black rectangle
el13a2w 1:c720fcb68396 290 }
el13a2w 0:b6b1dc0389cb 291 }
el13a2w 4:880995b4a063 292 serial.printf("Rate = 1\n");
el13a2w 0:b6b1dc0389cb 293 warning();
el13a2w 0:b6b1dc0389cb 294 }
el13a2w 0:b6b1dc0389cb 295 }
el13a2w 0:b6b1dc0389cb 296 if (setTimeFlag) { // if updated time has been sent
el13a2w 0:b6b1dc0389cb 297 setTimeFlag = 0; // clear flag
el13a2w 0:b6b1dc0389cb 298 setTime(); // update time
el13a2w 0:b6b1dc0389cb 299 }
el13a2w 0:b6b1dc0389cb 300 Sleep();
el13a2w 0:b6b1dc0389cb 301 }
el13a2w 0:b6b1dc0389cb 302 }
el13a2w 0:b6b1dc0389cb 303
el13a2w 0:b6b1dc0389cb 304
el13a2w 0:b6b1dc0389cb 305 void timer1Expired()
el13a2w 0:b6b1dc0389cb 306 {
el13a2w 0:b6b1dc0389cb 307 timer1Flag = 1;
el13a2w 0:b6b1dc0389cb 308 }
el13a2w 0:b6b1dc0389cb 309
el13a2w 0:b6b1dc0389cb 310 void timer2Expired()
el13a2w 0:b6b1dc0389cb 311 {
el13a2w 0:b6b1dc0389cb 312 timer2Flag = 1;
el13a2w 0:b6b1dc0389cb 313 }
el13a2w 0:b6b1dc0389cb 314
el13a2w 0:b6b1dc0389cb 315 void timer3Expired()
el13a2w 0:b6b1dc0389cb 316 {
el13a2w 0:b6b1dc0389cb 317 timer3Flag = 1;
el13a2w 0:b6b1dc0389cb 318 }
el13a2w 0:b6b1dc0389cb 319
el13a2w 0:b6b1dc0389cb 320 void timer4Expired()
el13a2w 0:b6b1dc0389cb 321 {
el13a2w 0:b6b1dc0389cb 322 timer4Flag = 1;
el13a2w 0:b6b1dc0389cb 323 }
el13a2w 0:b6b1dc0389cb 324
el13a2w 0:b6b1dc0389cb 325 void timer5Expired()
el13a2w 0:b6b1dc0389cb 326 {
el13a2w 0:b6b1dc0389cb 327 timer5Flag = 1;
el13a2w 0:b6b1dc0389cb 328 }
el13a2w 0:b6b1dc0389cb 329
el13a2w 0:b6b1dc0389cb 330 float measureDistance()
el13a2w 0:b6b1dc0389cb 331 {
el13a2w 0:b6b1dc0389cb 332 float d1 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 333 float d2 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 334 float d3 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 335 float d4 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 336 float d5 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 337 float d6 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 338 float d7 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 339 float d8 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 340 float d9 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 341 float d10 = sensor.getDistanceCm();
el13a2w 0:b6b1dc0389cb 342 float dt = (d1+d2+d3+d4+d5+d6+d7+d8+d9+d10)/10;
el13a2w 0:b6b1dc0389cb 343 return dt;
el13a2w 0:b6b1dc0389cb 344 }
el13a2w 0:b6b1dc0389cb 345
el13a2w 0:b6b1dc0389cb 346 void setTime()
el13a2w 0:b6b1dc0389cb 347 {
el13a2w 0:b6b1dc0389cb 348 // print time for debugging
el13a2w 0:b6b1dc0389cb 349 serial.printf("set_time - %s",rxString);
el13a2w 0:b6b1dc0389cb 350 // atoi() converts a string to an integer
el13a2w 0:b6b1dc0389cb 351 int time = atoi(rxString);
el13a2w 0:b6b1dc0389cb 352 // update the time
el13a2w 0:b6b1dc0389cb 353 set_time(time);
el13a2w 0:b6b1dc0389cb 354 }
el13a2w 0:b6b1dc0389cb 355 void serialISR()
el13a2w 0:b6b1dc0389cb 356 {
el13a2w 0:b6b1dc0389cb 357 // when a serial interrupt occurs, read rx string into buffer
el13a2w 0:b6b1dc0389cb 358 serial.gets(rxString,30);
el13a2w 0:b6b1dc0389cb 359 // set flag
el13a2w 0:b6b1dc0389cb 360 setTimeFlag = 1;
el13a2w 0:b6b1dc0389cb 361 }
el13a2w 0:b6b1dc0389cb 362
el13a2w 0:b6b1dc0389cb 363 void uPressed() // toggle direction in ISR
el13a2w 0:b6b1dc0389cb 364 {
el13a2w 0:b6b1dc0389cb 365 uFlag = !uFlag;
el13a2w 3:012cdc8e0f75 366 wait (0.2);
el13a2w 0:b6b1dc0389cb 367 }
el13a2w 0:b6b1dc0389cb 368
el13a2w 0:b6b1dc0389cb 369 void dPressed() // toggle direction in ISR
el13a2w 0:b6b1dc0389cb 370 {
el13a2w 0:b6b1dc0389cb 371 dFlag = !dFlag;
el13a2w 0:b6b1dc0389cb 372 wait (0.2);
el13a2w 0:b6b1dc0389cb 373 }
el13a2w 0:b6b1dc0389cb 374
el13a2w 0:b6b1dc0389cb 375 void warning()
el13a2w 0:b6b1dc0389cb 376 {
el13a2w 1:c720fcb68396 377 float vol = pot.read()/5;
el13a2w 0:b6b1dc0389cb 378 led2 = !led2;
el13a2w 1:c720fcb68396 379 buzzer = vol+0.8;
el13a2w 0:b6b1dc0389cb 380 }
el13a2w 0:b6b1dc0389cb 381
el13a2w 0:b6b1dc0389cb 382 void writeDataToFile(char* buffer, float distance)
el13a2w 0:b6b1dc0389cb 383 {
el13a2w 1:c720fcb68396 384 leds = 1; // turn on LEDs for feedback
el13a2w 0:b6b1dc0389cb 385 FILE *fp = fopen("/local/log.csv", "a"); // open 'log.csv' for appending
el13a2w 0:b6b1dc0389cb 386 // if the file doesn't exist it is created, if it exists, data is appended to the end
el13a2w 0:b6b1dc0389cb 387 fprintf(fp,"%s, %.2f\n",buffer, distance); // print string to file
el13a2w 0:b6b1dc0389cb 388 serial.printf("Data Logged\n\r");
el13a2w 0:b6b1dc0389cb 389 fclose(fp); // close file
el13a2w 0:b6b1dc0389cb 390 leds = 0; // turn off LEDs to signify file access has finished
el13a2w 0:b6b1dc0389cb 391 }