Super Sensor

Dependencies:   N5110 PowerControl SRF02 beep mbed

Revision:
0:933481fda425
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.h	Mon May 11 22:12:11 2015 +0000
@@ -0,0 +1,327 @@
+/** 
+@file main.h
+@brief Header file containing functions prototypes, define and global variables
+@brief coding for embedded device (Project A - Reverse Sensor)
+@brief ELEC 2645
+@brief 200906557
+@author Muhammad Muhaimin Mokhtar
+@date May 2015
+*/
+
+//L I B R A R I E S
+#include "mbed.h"
+#include "N5110.h"//Imported from Dr. Craig A. Evans library
+#include "SRF02.h"//Imported from Dr. Craig A. Evans library
+#include "beep.h" //Imported from Peter Descher library, , Files at revision 4:d8e14429a95f
+#include "PowerControl/PowerControl.h" //Imported from Michael Wei's library
+#include "PowerControl/EthernetPowerControl.h"// Imported from Michael Wei's library
+
+//P I N S
+
+/** 
+@namespace N511o lcd
+@brief GPIO pins connected to LCD Display
+@brief (LCD_VCC,SCE,RST,DC,MOSI,SCK,BACKLIGHT)
+*/
+N5110 lcd(p7,p8,p9,p10,p11,p13,p26);
+/**
+@namespace sensor
+@brief GPIO pins for SRF02 sensor
+@brief (SDA,SCL)
+*/
+SRF02 sensor(p28,p27);
+/**
+@namespace red 
+@brief PWM pin for red led
+*/
+PwmOut red(p22);
+/**
+@namespace yellow
+@brief PWM pin for yellow led
+*/
+PwmOut yellow(p23);
+/**
+@namespace green
+@brief PWM pin for green led
+*/
+PwmOut green(p24);
+/**
+@namespace button
+@brief InterruptIn pin for button
+*/
+InterruptIn button(p15);
+/**
+@namespace buzzer 
+@brief PWM pin for buzzer
+*/
+Beep buzzer(p21);
+/** 
+@namespace lcdBrightness
+@brief AnalogIn pin for LCD backlight
+*/
+PwmOut lcdBrightness (p26);
+/**
+@namespace potBrightness
+@brief AnalogIn pin for potentiometer
+*/
+AnalogIn potBrightness (p20);
+
+//V A R I A B L E S
+int distance;              /*!<distance between sensor and obstacles*/     
+int buttonFlag =0;         /*!<print flag set in ISR (Interrupt Service Routine)*/
+int setTimeFlag = 0;       /*!<integer to display time on LCD*/
+int displayReading = 0;    /*!<integer to display measurement on LCD*/
+
+//F U N C T I O N S
+
+/** Print welcome message 
+    * @param message - print 'WELCOME'
+    * @param a - set the coordinate for charachter to be print
+    * @param super - print 'SUPER SENSOR'
+    * @param mokh - print 'M.MOKH'
+    * @param number - print '200906557'
+    */
+void welcomeMessage();
+
+/** measure distance between sensor and obstacle
+  * @param distance - SRF02 measure distance 
+  * @return value of measured distance in cm
+  */
+void getDistance();
+
+/** print car and obstacle figure
+  * @param lcd.drawRect - draw rectangle shape
+  * @param lcd.drawCircle - draw circle shape
+  * @param lcd.printString - print 'DANGER!!' in danger range
+  * @param lcd.refresh - refresh lcd display
+  * @param distanceGreen - green led on
+  * @param distanceYellow - yellow led on
+  * @param distanceRed - red led on
+  */
+void readDistance();
+
+/**
+  * distance measured in green range 
+  * only green led lights up
+  * @param buzzer.beep - buzzer beeping at 1kHz every 1 second
+  * @param buzzer.nobeep - stop the buzzer instantaneous
+  * @param wait - wait for 1.5 seconds
+  */ 
+void distanceGreen();
+
+/**
+  * distance measured in yellow range
+  * only yellow led lights up
+  * @param buzzer.beep - buzzer beeping at 1kHz every 1 second
+  * @param buzzer.nobeep - stop the buzzer instantaneous
+  * @param wait - wait for 1.0 second 
+  */ 
+void distanceYellow();
+
+/**
+  * distance measured in red range
+  * only red led lights up
+  * @param buzzer.beep - buzzer beeping at 1kHz every 1 second
+  * @param buzzer.nobeep - stop the buzzer instantaneous
+  * @param wait - wait for 0.5 second
+  */ 
+void distanceRed();
+
+/**
+  * distance measured in danger range
+  * only red led lights up
+  * @param buzzer.beep - buzzer beeping at 1kHz every 1 second
+  * @param buzzer.nobeep - stop the buzzer instantaneous
+  * @param wait - wait for 0.1 second
+  */ 
+void distanceDanger();
+
+/**
+  *interrupt service routine when button is pressed 
+  * @param buttonFlag - button flag will be set to 1 on rising edge
+  *
+  */
+void buttonPressed();
+
+/**
+  * set time and date display on the lcd 
+  * @param buffer - store current time
+  * @param date - store current date
+  * @param day - store current day
+  * @param lcd.printString - print date & time on lcd 
+  */
+void timeZone();
+
+//print welcome message
+
+void welcomeMessage()
+{
+    int a[12] = {0,6,12,18,24,30,36,42,48,54,60,66};      // coordinate of character to be printed on
+    const char message[7] = {'W','E','L','C','O','M','E'}; 
+    char super[12] = {'S','U','P','E','R',' ','S','E','N','S','O','R'};
+    char mokh[9] = {'M','.','M','O','K','H','T','A','R'};
+    char number[9] = {'2','0','0','9','0','6','5','5','7'};
+    int i;
+    for(i=0; i<7; i++) {
+        lcd.printChar(message[i],a[i],0);  // character is printed one at a time untill increment is satisfied
+        wait(0.1);
+    }
+    for(i=0; i<12; i++) {
+        lcd.printChar(super[i],a[i],2);
+        wait(0.1);                        // character is printed one at a time untill increment is satisfied
+    }
+    for(i=0; i<9; i++) {
+        lcd.printChar(mokh[i],a[i],4);     // character is printed one at a time untill increment is satisfied
+        wait(0.1);
+    }
+    for(i=0; i<9; i++) {
+        lcd.printChar(number[i],a[i],5);   // character is printed one at a time untill increment is satisfied
+        wait(0.1);
+    }
+    wait(4.0);
+}
+
+void getDistance()
+{
+    distance = sensor.getDistanceCm();
+    
+}
+
+void readDistance()
+{
+    if(distance>=240) {
+        lcd.drawRect(0,0,7,48,1); //obstacle (wall)
+        lcd.drawRect(58,30,20,10,1); //rectangle 1(x,y,width,height,blackfill)
+        lcd.drawRect(63,22,10,8,1); //rectangle 2
+        lcd.drawCircle(63,44,4,1); //circle 1
+        lcd.drawCircle(73,44,4,1); //circle 2(x,y,radius,black fill)
+        lcd.refresh();
+        distanceGreen();
+    } else if (distance >= 200 & distance <=239) {
+        lcd.drawRect(0,0,7,48,1);
+        lcd.drawRect(51,30,20,10,1);
+        lcd.drawRect(56,22,10,8,1);
+        lcd.drawCircle(56,44,4,1);
+        lcd.drawCircle(66,44,4,1);
+        lcd.refresh();
+        distanceGreen();
+
+    } else if (distance >=160 & distance <=199) {
+        lcd.drawRect(0,0,7,48,1);
+        lcd.drawRect(44,30,20,10,1);
+        lcd.drawRect(49,22,10,8,1);
+        lcd.drawCircle(49,44,4,1);
+        lcd.drawCircle(59,44,4,1);
+        lcd.refresh();
+        distanceGreen();
+    } else if (distance >=120 & distance <=159) {
+        lcd.drawRect(0,0,7,48,1);
+        lcd.drawRect(37,30,20,10,1);
+        lcd.drawRect(42,22,10,8,1);
+        lcd.drawCircle(42,44,4,1);
+        lcd.drawCircle(52,44,4,1);
+        lcd.refresh();
+        distanceYellow();
+    } else if (distance >=80 & distance <=119) {
+        lcd.drawRect(0,0,7,48,1);
+        lcd.drawRect(30,30,20,10,1);
+        lcd.drawRect(35,22,10,8,1);
+        lcd.drawCircle(35,44,4,1);
+        lcd.drawCircle(45,44,4,1);
+        lcd.refresh();
+        distanceYellow();
+    } else if (distance >=40 & distance <= 79) {
+        lcd.drawRect(0,0,7,48,1);
+        lcd.drawRect(23,30,20,10,1);
+        lcd.drawRect(28,22,10,8,1);
+        lcd.drawCircle(28,44,4,1);
+        lcd.drawCircle(38,44,4,1);
+        lcd.refresh();
+        distanceYellow();
+    } else if (distance >=25 & distance <=39) {
+        lcd.drawRect(0,0,7,48,1);
+        lcd.drawRect(16,30,20,10,1);
+        lcd.drawRect(21,22,10,8,1);
+        lcd.drawCircle(21,44,4,1);
+        lcd.drawCircle(31,44,4,1);
+        lcd.refresh();
+        distanceRed();
+    } else if (distance <=24) { 
+        lcd.drawRect(0,0,7,48,1);
+        lcd.drawRect(9,30,20,10,1);
+        lcd.drawRect(14,22,10,8,1);
+        lcd.drawCircle(14,44,4,1);
+        lcd.drawCircle(24,44,4,1);
+        lcd.printString("DANGER!!",32,5); //'DANGER!!' is printed at par with car figure
+        lcd.refresh();
+        distanceDanger();
+
+
+    }
+}
+
+       // car is in green range distance (safe)
+void distanceGreen()
+{
+    red = 0;
+    yellow = 0;
+    green = 1;          //only green led is lights up
+    buzzer.beep(1000,1);
+    wait (1.5);
+    buzzer.nobeep();
+}
+      //car is in yellow range distance (cautious)
+void distanceYellow()
+{
+    red = 0;
+    yellow = 1;       //only yellow led is lights up
+    green = 0;
+    buzzer.beep(1000,1);
+    wait (1.0);
+    buzzer.nobeep();
+}
+    //when car is in red ange distance (prepare to stop)
+void distanceRed()
+{
+    red = 1;     //only red led is lights up
+    yellow = 0;
+    green = 0;
+    buzzer.beep(1000,1);
+    wait (0.5);
+    buzzer.nobeep();
+}
+
+     //when car is in danger range distance (no longer safe to reverse)
+void distanceDanger()
+{
+    red = 1;    // only red led is lights up
+    yellow = 0;
+    green = 0;
+    buzzer.beep(1000,1);
+    wait (0.1);
+    buzzer.nobeep();
+}
+
+void buttonPressed()
+{
+    buttonFlag = 1; // interrupt service routine
+}
+//display and store time
+void timeZone()
+{
+    
+    time_t seconds = time(NULL); // get current time
+// format time into a string (time and date)
+    char buffer [30];
+    char date [30];
+    char day [30];
+    strftime(buffer, 30 , "%r ", localtime(&seconds));
+    strftime(date, 30, "%F", localtime(&seconds));
+    strftime (day, 30, "%A", localtime(&seconds));
+// print over serial
+    lcd.printString (buffer,10,3);
+    lcd.printString (date,15,4);
+    lcd.printString (day, 25, 5);
+    wait(1.0); // delay for a second
+    lcd.clear();
+}