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:
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