![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
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@2:272d9de9f37e, 2015-04-10 (annotated)
- 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?
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 | 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 | } |