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