
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
Revision 1:c720fcb68396, committed 2015-04-10
- Comitter:
- el13a2w
- Date:
- Fri Apr 10 14:14:52 2015 +0000
- Parent:
- 0:b6b1dc0389cb
- Child:
- 2:272d9de9f37e
- Commit message:
- 2
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Thu Apr 09 10:22:49 2015 +0000 +++ b/main.cpp Fri Apr 10 14:14:52 2015 +0000 @@ -4,6 +4,8 @@ #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 @@ -17,6 +19,7 @@ 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 @@ -42,10 +45,25 @@ 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) 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.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.drawCircle(37,27,1,1); // x,y,radius,black fill + lcd.drawCircle(47,27,1,1); // x,y,radius,black fill + wait(1); + lcd.clear(); // Clear all pixels off display + serial.baud(9600); // set baud rate unit.rise(&uPressed); // call ISR on rising edge (button pressed) display.rise(&dPressed); // call ISR on rising edge (button pressed) @@ -55,20 +73,25 @@ timer4.attach(&timer4Expired,0.5); // 2s timer timer5.attach(&timer5Expired,0.1); // 2s timer serial.attach(&serialISR); // attach serial ISR - char buffer[30]; // buffer used to store time string + char buffer[30]; // buffer used to store information set_time(0); // initialise time to 1st January 1970 led1 = 1; + 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(); time_t seconds = time(NULL); // get current time // format time into a string (time and date) - strftime(buffer, 30 , "%D %r", localtime(&seconds)); - //if (dFlag) { - //writeDataToFile(buffer, distance); // write current value to disk - //} + strftime(buffer, 30 , "%b %d, %X", localtime(&seconds)); + /*if (dFlag) { + writeDataToFile(buffer, distance); // write current value to disk + }*/ + lcd.clear(); + lcd.init(); // initialise display if (distance<30) { if (timer5Flag) { timer5Flag = 0; @@ -79,8 +102,24 @@ if (uFlag) { float mdistance = distance/100; serial.printf("%s, %.2f m\n",buffer, mdistance); + float length = sprintf(buffer,"D = %.2f m",mdistance); + if (dFlag) { + if (length <= 14) { + lcd.printString(buffer,7,1); + } + } else { + lcd.drawRect(1,1,84,48,1); // filled black rectangle + } } else { serial.printf("%s, %.0f cm\n",buffer, distance); + float length = sprintf(buffer,"D = %.2f cm",distance); + if (dFlag) { + if (length <= 14) { + lcd.printString(buffer,7,1); + } + } else { + lcd.drawRect(1,1,84,48,1); // filled black rectangle + } } serial.printf("Rate = 0.1\n"); warning(); @@ -95,11 +134,27 @@ if (uFlag) { float mdistance = distance/100; serial.printf("%s, %.2f m\n",buffer, mdistance); + float length = sprintf(buffer,"D = %.2f m",mdistance); + if (dFlag) { + if (length <= 14) { + lcd.printString(buffer,7,1); + } + } else { + lcd.drawRect(1,1,64,48,1); // filled black rectangle + } } else { serial.printf("%s, %.0f cm\n",buffer, distance); + float length = sprintf(buffer,"D = %.2f cm",distance); + if (dFlag) { + if (length <= 14) { + lcd.printString(buffer,7,1); + } + } else { + lcd.drawRect(1,1,64,48,1); // filled black rectangle + } } + serial.printf("Rate = 0.1\n"); warning(); - serial.printf("Rate = 0.5\n"); } } else if (distance<90) { if (timer3Flag) { @@ -111,11 +166,27 @@ if (uFlag) { float mdistance = distance/100; serial.printf("%s, %.2f m\n",buffer, mdistance); + float length = sprintf(buffer,"D = %.2f m",mdistance); + if (dFlag) { + if (length <= 14) { + lcd.printString(buffer,7,1); + } + } else { + lcd.drawRect(1,1,44,48,1); // filled black rectangle + } } else { serial.printf("%s, %.0f cm\n",buffer, distance); + float length = sprintf(buffer,"D = %.2f cm",distance); + if (dFlag) { + if (length <= 14) { + lcd.printString(buffer,7,1); + } + } else { + lcd.drawRect(1,1,44,48,1); // filled black rectangle + } } + serial.printf("Rate = 0.1\n"); warning(); - serial.printf("Rate = 1\n"); } } else if (distance<120) { if (timer2Flag) { @@ -127,11 +198,27 @@ if (uFlag) { float mdistance = distance/100; serial.printf("%s, %.2f m\n",buffer, mdistance); + float length = sprintf(buffer,"D = %.2f m",mdistance); + if (dFlag) { + if (length <= 14) { + lcd.printString(buffer,7,1); + } + } else { + lcd.drawRect(1,1,24,48,1); // filled black rectangle + } } else { serial.printf("%s, %.0f cm\n",buffer, distance); + float length = sprintf(buffer,"D = %.2f cm",distance); + if (dFlag) { + if (length <= 14) { + lcd.printString(buffer,7,1); + } + } else { + lcd.drawRect(1,1,24,48,1); // filled black rectangle + } } + serial.printf("Rate = 0.1\n"); warning(); - serial.printf("Rate = 1.5\n"); } } else { if (timer1Flag) { @@ -143,11 +230,27 @@ if (uFlag) { float mdistance = distance/100; serial.printf("%s, %.2f m\n",buffer, mdistance); + float length = sprintf(buffer,"D = %.2f m",mdistance); + if (dFlag) { + if (length <= 14) { + lcd.printString(buffer,7,1); + } + } else { + lcd.drawRect(1,1,4,48,1); // filled black rectangle + } } else { serial.printf("%s, %.0f cm\n",buffer, distance); + float length = sprintf(buffer,"D = %.2f cm",distance); + if (dFlag) { + if (length <= 14) { + lcd.printString(buffer,7,1); + } + } else { + lcd.drawRect(1,1,4,48,1); // filled black rectangle + } } + serial.printf("Rate = 0.1\n"); warning(); - serial.printf("Rate = 2\n"); } } if (setTimeFlag) { // if updated time has been sent @@ -230,13 +333,14 @@ void warning() { + float vol = pot.read()/5; led2 = !led2; - buzzer = 0.5; + buzzer = vol+0.8; } void writeDataToFile(char* buffer, float distance) { - leds = 15; // turn on LEDs for feedback + leds = 1; // turn on LEDs for feedback FILE *fp = fopen("/local/log.csv", "a"); // open 'log.csv' for appending // if the file doesn't exist it is created, if it exists, data is appended to the end fprintf(fp,"%s, %.2f\n",buffer, distance); // print string to file