![](/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
Diff: main.cpp
- Revision:
- 3:012cdc8e0f75
- Parent:
- 2:272d9de9f37e
- Child:
- 4:880995b4a063
--- a/main.cpp Fri Apr 10 14:38:27 2015 +0000 +++ b/main.cpp Sun Apr 26 19:41:25 2015 +0000 @@ -3,62 +3,19 @@ #include "PowerControl/EthernetPowerControl.h" #include "SRF02.h" #include "N5110.h" - -// vcc, sce, rst, dc, mosi, clk, led -N5110 lcd(p7,p8,p9,p10,p11,p13,p26); //pwm for led backlight -BusOut leds(LED4,LED3,LED2,LED1); // Onboard LEDs -SRF02 sensor(p28,p27); // sda, scl -Serial serial(USBTX,USBRX); // tx, rx -Ticker timer1; // timer1 -Ticker timer2; // timer2 -Ticker timer3; // timer3 -Ticker timer4; // timer4 -Ticker timer5; // timer5 -InterruptIn unit(p16); // input interrupt button -InterruptIn display(p17); // input interrupt button -DigitalOut led1(p24); // on/off LED -DigitalOut led2(p23); // warning LED -PwmOut buzzer(p21); // warning buzzer -AnalogIn pot(p20); -LocalFileSystem local("local"); // create local filesystem - -void serialISR(); // ISR that is called when serial data is received -void setTime(); // function to set the UNIX time -char rxString[16]; // buffer to store received string -void error(int code); // determines error -void uPressed(); // function to action of unit button -void dPressed(); // function to action of display button -void timer1Expired(); // function to action when timer1 triggers -void timer2Expired(); // function to action when timer2 triggers -void timer3Expired(); // function to action when timer3 triggers -void timer4Expired(); // function to action when timer4 triggers -void timer5Expired(); // function to action when timer5 triggers -void warning(); // warning function -void writeDataToFile(char* buffer, float distance); // function to write data to file -float measureDistance(); // function to get distance - -int timer1Flag = 0; // set timer1Flag -int timer2Flag = 0; // set timer2Flag -int timer3Flag = 0; // set timer3Flag -int timer4Flag = 0; // set timer4Flag -int timer5Flag = 0; // set timer5Flag -int uFlag = 0; // set unitFlag -int dFlag = 0; // set displayFlag -int setTimeFlag = 0; // flag for ISR -int nGen[84][48]; // array set -int x = 84; // size of set horizontally (x-axis) -int y = 48; //size of set vertically (y-axis) +#include "main.h" int main() { + //PHY_PowerDown(); lcd.init(); // initialise display - lcd.printString("Ultrasonic", 13,1); - lcd.printString("Sensor", 25,2); - lcd.printString("Adrian Wong", 9,4); + lcd.printString("Ultrasonic", 13,1); // print string on row 1 + lcd.printString("Sensor", 25,2); // print string on row 2 + lcd.printString("Adrian Wong", 9,4); // print string on row 4 lcd.drawRect(1,1,81,45,0); // transparent, just outline lcd.drawRect(5,26,28,2,1); // filled black rectangle lcd.drawRect(51,26,28,2,1); // filled black rectangle - lcd.printString("X", 40,3); + lcd.printString("X", 40,3); // print string on row 3 lcd.drawCircle(37,27,1,1); // x,y,radius,black fill lcd.drawCircle(47,27,1,1); // x,y,radius,black fill wait(1); @@ -68,10 +25,10 @@ unit.rise(&uPressed); // call ISR on rising edge (button pressed) display.rise(&dPressed); // call ISR on rising edge (button pressed) timer1.attach(&timer1Expired,2); // 2s timer - timer2.attach(&timer2Expired,1.5); // 2s timer - timer3.attach(&timer3Expired,1); // 2s timer - timer4.attach(&timer4Expired,0.5); // 2s timer - timer5.attach(&timer5Expired,0.1); // 2s timer + timer2.attach(&timer2Expired,1.5); // 1.5s timer + timer3.attach(&timer3Expired,1); // 1s timer + timer4.attach(&timer4Expired,0.5); // 0.5s timer + timer5.attach(&timer5Expired,0.1); // 0.1s timer serial.attach(&serialISR); // attach serial ISR char buffer[30]; // buffer used to store information char buffer1[14]; // buffer used to store distance for LCD @@ -83,40 +40,40 @@ while(1) { lcd.normalMode(); // normal colour mode lcd.setBrightness(0.5); // put LED backlight on 50% - led2 = 0; - buzzer = 0; - buzzer.period(0.001); - float distance = measureDistance(); + led2 = 0; // resets led2 + buzzer = 0; // resets buzzer + buzzer.period(0.001); // sets buzzer pwm period + float distance = measureDistance(); // get the distance time_t seconds = time(NULL); // get current time // format time into a string (time and date) - strftime(buffer, 30 , "%b %d, %X", localtime(&seconds)); - strftime(buffer2, 14 , "%X", localtime(&seconds)); - strftime(buffer3, 14 , "%b %d", localtime(&seconds)); + strftime(buffer, 30 , "%b %d, %X", localtime(&seconds)); // set buffer to store time and date + strftime(buffer2, 14 , "%X", localtime(&seconds)); // set buffer2 to store time + strftime(buffer3, 14 , "%b %d", localtime(&seconds)); // set buffer3 to store date and month /*if (dFlag) { writeDataToFile(buffer, distance); // write current value to disk }*/ - lcd.clear(); + lcd.clear(); // clear display lcd.init(); // initialise display if (distance<30) { if (timer5Flag) { - timer5Flag = 0; - timer4Flag = 0; - timer3Flag = 0; - timer2Flag = 0; - timer1Flag = 0; + timer5Flag = 0; // resets timer flag + timer4Flag = 0; // resets timer flag + timer3Flag = 0; // resets timer flag + timer2Flag = 0; // resets timer flag + timer1Flag = 0; // resets timer flag if (uFlag) { - float mdistance = distance/100; - serial.printf("%s, %.2f m\n",buffer, mdistance); - float length = sprintf(buffer1,"D = %.2f m",mdistance); - float length1 = sprintf(buffer2,"%s",buffer2); - float length2 = sprintf(buffer3,"%s",buffer3); + float mdistance = distance/100; // get distance in metres + serial.printf("%s, %.2f m\n",buffer, mdistance); // print time then distance in metres + float length = sprintf(buffer1,"D = %.2f m",mdistance); // print distance on lcd + float length1 = sprintf(buffer2,"%s",buffer2); // print time + float length2 = sprintf(buffer3,"%s",buffer3); // print date and month if (dFlag) { if (length <= 14) { if (length1 <= 14) { if (length2 <= 14) { - lcd.printString(buffer1,3,1); - lcd.printString(buffer2,18,4); - lcd.printString(buffer3,24,3); + lcd.printString(buffer1,3,1); // print on row 1 + lcd.printString(buffer2,18,4); // print on row 4 + lcd.printString(buffer3,24,3); // print on row 3 } } } @@ -124,17 +81,17 @@ lcd.drawRect(1,1,84,48,1); // filled black rectangle } } else { - serial.printf("%s, %.0f cm\n",buffer, distance); - float length = sprintf(buffer1,"D = %.2f cm",distance); - float length1 = sprintf(buffer2,"%s",buffer2); - float length2 = sprintf(buffer3,"%s",buffer3); + serial.printf("%s, %.0f cm\n",buffer, distance); // print time then distance in centimetres + float length = sprintf(buffer1,"D = %.2f cm",distance); // print distance on lcd + float length1 = sprintf(buffer2,"%s",buffer2); // print time + float length2 = sprintf(buffer3,"%s",buffer3); // print date and month if (dFlag) { if (length <= 14) { if (length1 <= 14) { if (length2 <= 14) { - lcd.printString(buffer1,3,1); - lcd.printString(buffer2,18,4); - lcd.printString(buffer3,24,3); + lcd.printString(buffer1,3,1); // print on row 1 + lcd.printString(buffer2,18,4); // print on row 4 + lcd.printString(buffer3,24,3); // print on row 3 } } } @@ -147,24 +104,24 @@ } } else if (distance<60) { if (timer4Flag) { - timer5Flag = 0; - timer4Flag = 0; - timer3Flag = 0; - timer2Flag = 0; - timer1Flag = 0; + timer5Flag = 0; // resets timer flag + timer4Flag = 0; // resets timer flag + timer3Flag = 0; // resets timer flag + timer2Flag = 0; // resets timer flag + timer1Flag = 0; // resets timer flag if (uFlag) { - float mdistance = distance/100; - serial.printf("%s, %.2f m\n",buffer, mdistance); - float length = sprintf(buffer1,"D = %.2f m",mdistance); - float length1 = sprintf(buffer2,"%s",buffer2); - float length2 = sprintf(buffer3,"%s",buffer3); + float mdistance = distance/100; // get distance in metres + serial.printf("%s, %.2f m\n",buffer, mdistance); // print time then distance in metres + float length = sprintf(buffer1,"D = %.2f m",mdistance); // print distance on lcd + float length1 = sprintf(buffer2,"%s",buffer2); // print time + float length2 = sprintf(buffer3,"%s",buffer3); // print date and month if (dFlag) { if (length <= 14) { if (length1 <= 14) { if (length2 <= 14) { - lcd.printString(buffer1,3,1); - lcd.printString(buffer2,18,4); - lcd.printString(buffer3,24,3); + lcd.printString(buffer1,3,1); // print on row 1 + lcd.printString(buffer2,18,4); // print on row 4 + lcd.printString(buffer3,24,3); // print on row 3 } } } @@ -172,17 +129,17 @@ lcd.drawRect(1,1,64,48,1); // filled black rectangle } } else { - serial.printf("%s, %.0f cm\n",buffer, distance); - float length = sprintf(buffer1,"D = %.2f cm",distance); - float length1 = sprintf(buffer2,"%s",buffer2); - float length2 = sprintf(buffer3,"%s",buffer3); + serial.printf("%s, %.0f cm\n",buffer, distance); // print time then distance in centimetres + float length = sprintf(buffer1,"D = %.2f cm",distance); // print distance on lcd + float length1 = sprintf(buffer2,"%s",buffer2); // print time + float length2 = sprintf(buffer3,"%s",buffer3); // print date and month if (dFlag) { if (length <= 14) { if (length1 <= 14) { if (length2 <= 14) { - lcd.printString(buffer1,3,1); - lcd.printString(buffer2,18,4); - lcd.printString(buffer3,24,3); + lcd.printString(buffer1,3,1); // print on row 1 + lcd.printString(buffer2,18,4); // print on row 4 + lcd.printString(buffer3,24,3); // print on row 3 } } } @@ -195,24 +152,24 @@ } } else if (distance<90) { if (timer3Flag) { - timer5Flag = 0; - timer4Flag = 0; - timer3Flag = 0; - timer2Flag = 0; - timer1Flag = 0; + timer5Flag = 0; // resets timer flag + timer4Flag = 0; // resets timer flag + timer3Flag = 0; // resets timer flag + timer2Flag = 0; // resets timer flag + timer1Flag = 0; // resets timer flag if (uFlag) { - float mdistance = distance/100; - serial.printf("%s, %.2f m\n",buffer, mdistance); - float length = sprintf(buffer1,"D = %.2f m",mdistance); - float length1 = sprintf(buffer2,"%s",buffer2); - float length2 = sprintf(buffer3,"%s",buffer3); + float mdistance = distance/100; // get distance in metres + serial.printf("%s, %.2f m\n",buffer, mdistance); // print time then distance in metres + float length = sprintf(buffer1,"D = %.2f m",mdistance); // print distance on lcd + float length1 = sprintf(buffer2,"%s",buffer2); // print time + float length2 = sprintf(buffer3,"%s",buffer3); // print date and month if (dFlag) { if (length <= 14) { if (length1 <= 14) { if (length2 <= 14) { - lcd.printString(buffer1,3,1); - lcd.printString(buffer2,18,4); - lcd.printString(buffer3,24,3); + lcd.printString(buffer1,3,1); // print on row 1 + lcd.printString(buffer2,18,4); // print on row 4 + lcd.printString(buffer3,24,3); // print on row 3 } } } @@ -220,17 +177,17 @@ lcd.drawRect(1,1,44,48,1); // filled black rectangle } } else { - serial.printf("%s, %.0f cm\n",buffer, distance); - float length = sprintf(buffer1,"D = %.2f cm",distance); - float length1 = sprintf(buffer2,"%s",buffer2); - float length2 = sprintf(buffer3,"%s",buffer3); + serial.printf("%s, %.0f cm\n",buffer, distance); // print time then distance in centimetres + float length = sprintf(buffer1,"D = %.2f cm",distance); // print distance on lcd + float length1 = sprintf(buffer2,"%s",buffer2); // print time + float length2 = sprintf(buffer3,"%s",buffer3); // print date and month if (dFlag) { if (length <= 14) { if (length1 <= 14) { if (length2 <= 14) { - lcd.printString(buffer1,3,1); - lcd.printString(buffer2,18,4); - lcd.printString(buffer3,24,3); + lcd.printString(buffer1,3,1); // print on row 1 + lcd.printString(buffer2,18,4); // print on row 4 + lcd.printString(buffer3,24,3); // print on row 3 } } } @@ -243,24 +200,24 @@ } } else if (distance<120) { if (timer2Flag) { - timer5Flag = 0; - timer4Flag = 0; - timer3Flag = 0; - timer2Flag = 0; - timer1Flag = 0; + timer5Flag = 0; // resets timer flag + timer4Flag = 0; // resets timer flag + timer3Flag = 0; // resets timer flag + timer2Flag = 0; // resets timer flag + timer1Flag = 0; // resets timer flag if (uFlag) { - float mdistance = distance/100; - serial.printf("%s, %.2f m\n",buffer1, mdistance); - float length = sprintf(buffer,"D = %.2f m",mdistance); - float length1 = sprintf(buffer2,"%s",buffer2); - float length2 = sprintf(buffer3,"%s",buffer3); + float mdistance = distance/100; // get distance in metres + serial.printf("%s, %.2f m\n",buffer, mdistance); // print time then distance in metres + float length = sprintf(buffer1,"D = %.2f m",mdistance); // print distance on lcd + float length1 = sprintf(buffer2,"%s",buffer2); // print time + float length2 = sprintf(buffer3,"%s",buffer3); // print date and month if (dFlag) { if (length <= 14) { if (length1 <= 14) { if (length2 <= 14) { - lcd.printString(buffer1,3,1); - lcd.printString(buffer2,18,4); - lcd.printString(buffer3,24,3); + lcd.printString(buffer1,3,1); // print on row 1 + lcd.printString(buffer2,18,4); // print on row 4 + lcd.printString(buffer3,24,3); // print on row 3 } } } @@ -268,17 +225,17 @@ lcd.drawRect(1,1,24,48,1); // filled black rectangle } } else { - serial.printf("%s, %.0f cm\n",buffer, distance); - float length = sprintf(buffer1,"D = %.2f cm",distance); - float length1 = sprintf(buffer2,"%s",buffer2); - float length2 = sprintf(buffer3,"%s",buffer3); + serial.printf("%s, %.0f cm\n",buffer, distance); // print time then distance in centimetres + float length = sprintf(buffer1,"D = %.2f cm",distance); // print distance on lcd + float length1 = sprintf(buffer2,"%s",buffer2); // print time + float length2 = sprintf(buffer3,"%s",buffer3); // print date and month if (dFlag) { if (length <= 14) { if (length1 <= 14) { if (length2 <= 14) { - lcd.printString(buffer1,3,1); - lcd.printString(buffer2,18,4); - lcd.printString(buffer3,24,3); + lcd.printString(buffer1,3,1); // print on row 1 + lcd.printString(buffer2,18,4); // print on row 4 + lcd.printString(buffer3,24,3); // print on row 3 } } } @@ -291,24 +248,24 @@ } } else { if (timer1Flag) { - timer5Flag = 0; - timer4Flag = 0; - timer3Flag = 0; - timer2Flag = 0; - timer1Flag = 0; + timer5Flag = 0; // resets timer flag + timer4Flag = 0; // resets timer flag + timer3Flag = 0; // resets timer flag + timer2Flag = 0; // resets timer flag + timer1Flag = 0; // resets timer flag if (uFlag) { - float mdistance = distance/100; - serial.printf("%s, %.2f m\n",buffer, mdistance); - float length = sprintf(buffer1,"D = %.2f m",mdistance); - float length1 = sprintf(buffer2,"%s",buffer2); - float length2 = sprintf(buffer3,"%s",buffer3); + float mdistance = distance/100; // get distance in metres + serial.printf("%s, %.2f m\n",buffer, mdistance); // print time then distance in metres + float length = sprintf(buffer1,"D = %.2f m",mdistance); // print distance on lcd + float length1 = sprintf(buffer2,"%s",buffer2); // print time + float length2 = sprintf(buffer3,"%s",buffer3); // print date and month if (dFlag) { if (length <= 14) { if (length1 <= 14) { if (length2 <= 14) { - lcd.printString(buffer1,3,1); - lcd.printString(buffer2,18,4); - lcd.printString(buffer3,24,3); + lcd.printString(buffer1,3,1); // print on row 1 + lcd.printString(buffer2,18,4); // print on row 4 + lcd.printString(buffer3,24,3); // print on row 3 } } } @@ -316,17 +273,17 @@ lcd.drawRect(1,1,4,48,1); // filled black rectangle } } else { - serial.printf("%s, %.0f cm\n",buffer, distance); - float length = sprintf(buffer1,"D = %.2f cm",distance); - float length1 = sprintf(buffer2,"%s",buffer2); - float length2 = sprintf(buffer3,"%s",buffer3); + serial.printf("%s, %.0f cm\n",buffer, distance); // print time then distance in centimetres + float length = sprintf(buffer1,"D = %.2f cm",distance); // print distance on lcd + float length1 = sprintf(buffer2,"%s",buffer2); // print time + float length2 = sprintf(buffer3,"%s",buffer3); // print date and month if (dFlag) { if (length <= 14) { if (length1 <= 14) { if (length2 <= 14) { - lcd.printString(buffer1,3,1); - lcd.printString(buffer2,18,4); - lcd.printString(buffer3,24,3); + lcd.printString(buffer1,3,1); // print on row 1 + lcd.printString(buffer2,18,4); // print on row 4 + lcd.printString(buffer3,24,3); // print on row 3 } } } @@ -408,6 +365,7 @@ void uPressed() // toggle direction in ISR { uFlag = !uFlag; + wait (0.2); } void dPressed() // toggle direction in ISR