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