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
main.cpp@5:c18bd289bc88, 2015-05-10 (annotated)
- 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?
User | Revision | Line number | New 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 | } |