Super Sensor

Dependencies:   N5110 PowerControl SRF02 beep mbed

main.h

Committer:
MuhaiminMokhtar
Date:
2015-05-11
Revision:
0:933481fda425

File content as of revision 0:933481fda425:

/** 
@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();
}