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
Parent:
0:b6b1dc0389cb
Child:
2:272d9de9f37e
--- 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