an ultrasonic sensor used as a car sensor
Dependencies: N5110 PowerControl beep mbed sensor
main.cpp
- Committer:
- sjaffal3
- Date:
- 2015-05-11
- Revision:
- 2:9328053b2ba7
- Parent:
- 1:475a5b7258fa
File content as of revision 2:9328053b2ba7:
/**
@file main.cpp
@brief Program implementation
*/
#include "main.h"
int main()
{
PHY_PowerDown(); /// the Ethernet cable is powered down
lcd.init(); /// the LCD display is initialised when switch is on
welcomeMessage(); /// the welcome message will appear
button.rise(&buttonPressed); /// event generated on rising edge
while (1) {
mypotVal = mypot; ///sets a variable to change as the pot is changing
lcd.setBrightness(mypotVal); ///sets the brightness to the pot value
compDist(); ///compares the distance to set it in a specific range
}
}
void buttonPressed()
{
wait(0.2);
if (i>1) ///when button is pressed it will check if i >1
{ i=0; /// if it is it will set it to 0
}
else
{ i++; /// if not it will increment i by one
}
}
///Print welcome message
void welcomeMessage()
{
lcd.printString("University of ",5,0);
lcd.printString("Leeds",27,1);
lcd.refresh();
lcd.drawRect(59,36,5,11,0);///bottom left rectangle is set
lcd.drawRect(72,36,5,11,0);///bottom right rectangle is set
lcd.drawRect(64,34,8,13,0);///bottom middle rectangle is set
lcd.drawRect(60,33,16,3,0); /// is set over the bottom rectangles
lcd.drawCircle(68,40,2,0); /// circle is set on bottom middle box
lcd.drawRect(61,26,14,7,0);///big middle box is set over everything
lcd.drawRect(63,27,10,0.5,1);///top black rectangle is set
lcd.drawRect(64.5,28,1,0.5,1);///left middle black rect is set
lcd.drawRect(67.5,28,1,0.5,1);///middle black rect is set
lcd.drawRect(70,28,1,0.5,1);///right middle black rect is set
lcd.drawRect(64.5,28,0.5,3.5,1);///left bottom black rect is set
lcd.drawRect(67.5,28,0.5,3.5,1);///middle bottom black rect is set
lcd.drawRect(70,28,0.5,3.5,1);///right bottom black rect is set
lcd.drawRect(62,21,12,5,0);///rectangle is set over big middle box
lcd.drawRect(66,22,0.5,0.5,1);///left top black rect is set
lcd.drawRect(68,22,0.5,0.5,1);///top black rect is set
lcd.drawRect(70,22,0.5,0.5,1);///right top black rect is set
lcd.drawRect(66,22,0.5,2,1);///left bottom black rect is set
lcd.drawRect(68,22,0.5,2,1);///middle bottom black rect is set
lcd.drawRect(70,22,0.5,2,1);///right bottom black rect is set
lcd.drawRect(64,17,8,4,0);///rectangle under triangle is set
lcd.drawLine(64,17,68,13.5,1);///left line to complete triangle
lcd.drawLine(72,17,68,13.5,1);///right line to complete triangle
lcd.clearPixel(65, 36); ///clears intersecting lines from rectangle
lcd.clearPixel(66, 36);
lcd.clearPixel(67, 36);
lcd.clearPixel(68, 36);
lcd.clearPixel(69, 36);
lcd.clearPixel(70, 36);
lcd.clearPixel(71, 36);
lcd.refresh();
wait(3.0);
lcd.clear();
lcd.printString("Saleh Jaffal",8,2);
lcd.printString("200911007",15,3);
lcd.refresh();
lcd.drawRect(6,12,73,21,0);
lcd.drawRect(4,10,77,25,0);
lcd.refresh();
getDistanceCm(); ///gets the distance after the message
getDistanceIn();
getDistanceUs();
}
void getDistanceCm()
{
distance1 = sensor.getDistanceCm(); ///adds up 10 distances read by the sensor
distance2 = sensor.getDistanceCm(); ///there is a 70 ms delay between each reading
distance3 = sensor.getDistanceCm();
distance4 = sensor.getDistanceCm();
distance5 = sensor.getDistanceCm();
distance6 = sensor.getDistanceCm();
distance7 = sensor.getDistanceCm();
distance8 = sensor.getDistanceCm();
distance9 = sensor.getDistanceCm();
distance10 = sensor.getDistanceCm();
sum = distance1+distance2+distance3+distance4+distance5+distance6+distance7+distance8+distance9+distance10;
///all of them are added to the sum
distanceCm = sum/10; ///the sum is divided by 10 to get the average
}
void getDistanceIn()
{
distance1 = sensor.getDistanceIn(); ///adds up 10 distances read by the sensor
distance2 = sensor.getDistanceIn(); ///there is a 70 ms delay between each reading
distance3 = sensor.getDistanceIn();
distance4 = sensor.getDistanceIn();
distance5 = sensor.getDistanceIn();
distance6 = sensor.getDistanceIn();
distance7 = sensor.getDistanceIn();
distance8 = sensor.getDistanceIn();
distance9 = sensor.getDistanceIn();
distance10 = sensor.getDistanceIn();
sum = distance1+distance2+distance3+distance4+distance5+distance6+distance7+distance8+distance9+distance10;
///all of them are added to the sum
distanceIn = sum/10; ///the sum is divided by 10 to get the average
}
void getDistanceUs()
{
distance1 = sensor.getDistanceUs(); ///adds up 10 distances read by the sensor
distance2 = sensor.getDistanceUs(); ///there is a 70 ms delay between each reading
distance3 = sensor.getDistanceUs();
distance4 = sensor.getDistanceUs();
distance5 = sensor.getDistanceUs();
distance6 = sensor.getDistanceUs();
distance7 = sensor.getDistanceUs();
distance8 = sensor.getDistanceUs();
distance9 = sensor.getDistanceUs();
distance10 = sensor.getDistanceUs();
sum = distance1+distance2+distance3+distance4+distance5+distance6+distance7+distance8+distance9+distance10;
///all of them are added to the sum
distanceUs = sum/10; ///the sum is divided by 10 to get the average
}
void compDist() ///used to compare the distances
{
switch (i)
{
case 0:
{
getDistanceCm();
///calls this action to show the reading
char buffer[14];
/// each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
int length = sprintf(buffer," %d cm",distanceCm);
/// print formatted data to buffer
if(length<=14);
/// if string will fit on display
lcd.clear(); /// clears LCD
lcd.drawRect(6,12,73,21,0);///sets 2 rectangles
lcd.drawRect(4,10,77,25,0);
lcd.printString("Distance =",8,2);///prints distance and the reading below it
lcd.printString(buffer,8,3);
lcd.refresh(); ///refreshes LCD screen
///compares distances and sets them in their specified range
if (distanceCm >= 100) {
A=0; ///sets case
distanceA();
}
else if (distanceCm >= 80 && distanceCm <= 99) {
A=1; ///sets case
distanceA();
}
else if (distanceCm >= 60 && distanceCm <= 79) {
A=2; ///sets case
distanceA();
}
else if (distanceCm >= 40 && distanceCm <= 59) {
A=3; ///sets case
distanceA();
}
else if (distanceCm >= 20 && distanceCm <=39 ) {
A=4; ///sets case
distanceA();
}
else {
A=5; ///sets case
distanceA();
}
}
break;
case (1):
{
getDistanceIn();
///calls this action to show the reading
char buffer[14];
/// each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
int length = sprintf(buffer," %d in",distanceIn);
/// print formatted data to buffer
if(length<=14);
/// if string will fit on display
lcd.clear(); /// clears LCD
lcd.drawRect(6,12,73,21,0);/// sets 2 rectangles
lcd.drawRect(4,10,77,25,0);
lcd.printString("Distance =",8,2);/// prints distance and the reading below it
lcd.printString(buffer,8,3);
lcd.refresh(); /// refreshes LCD screen
///compares distances and sets them in their specified range
if (distanceIn >= 40) {
A=0; ///sets case
distanceA();
}
else if (distanceIn >= 32 && distanceIn <= 39) {
A=1; ///sets case
distanceA();
}
else if (distanceIn >= 24 && distanceIn <= 31) {
A=2; ///sets case
distanceA();
}
else if (distanceIn >= 16 && distanceIn <= 23) {
A=3; ///sets case
distanceA();
}
else if (distanceIn >= 8 && distanceIn <=15 ) {
A=4; ///sets case
distanceA();
}
else {
A=5; ///sets case
distanceA();
}
}
break;
case(2):
{
getDistanceUs();
///calls this action to show the reading
char buffer[14];
/// each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
int length = sprintf(buffer," %d us",distanceUs);
/// print formatted data to buffer
if(length<=14);
/// if string will fit on display
lcd.clear(); /// clears LCD
lcd.drawRect(6,12,73,21,0);/// sets 2 rectangles
lcd.drawRect(4,10,77,25,0);
lcd.printString("Distance =",8,2);/// prints distance and the reading below it
lcd.printString(buffer,8,3);
lcd.refresh(); /// refreshes LCD screen
///compares distances and sets them in their specified range
if (distanceUs >= 5900) {
A=0; ///sets case
distanceA();
}
else if (distanceUs >= 4680 && distanceUs <= 5899) {
A=1;///sets case
distanceA();
}
else if (distanceUs >= 3400 && distanceUs <= 4679) {
A=2;///sets case
distanceA();
}
else if (distanceUs >= 2430 && distanceUs <= 3339) {
A=3;///sets case
distanceA();
}
else if (distanceUs >= 1220 && distanceUs <=2429 ) {
A=4;///sets case
distanceA();
}
else {
A=5;///sets case
distanceA();
}
}
break;
}
}
void distanceA() //sets leds and buzzer for each case
{
switch (A){
case(0):
{ //case 0 would have 1 LED on
green1=1;
green2=0;
yellow1=0;
yellow2=0;
red1=0;
red2=0;
lcd.printString("Out of range",0,0);
buzzer.beep(2000, 0.1); ///@see This code was from a library I found
}
break;
case(1):
{ ///case 1 would have 2 LED's on
green1=1;
green2=1;
yellow1=0;
yellow2=0;
red1=0;
red2=0;
lcd.printString("In range",0,0);
buzzer.beep(2000, 0.1); ///@see This code was from a library I found
}
break;
case(2):
{ //green1=1; ///case 2 would have 3 LED's on
green2=1;
yellow1=1;
yellow2=0;
red1=0;
red2=0;
lcd.printString("Take Care!",0,0);
buzzer.beep(2000, 0.2);
}
break;
case(3):
{
green1=1; ///case 3 would have 4 LED's on
green2=1;
yellow1=1;
yellow2=1;
red1=0;
red2=0;
lcd.printString("Closer!",0,0);
buzzer.beep(2000, 0.2); ///@see This code was from a library I found
}
break;
case(4):
{
green1=1; ///case 4 would have 5 LED's on
green2=1;
yellow1=1;
yellow2=1;
red1=1;
red2=0;
lcd.printString("VERY CLOSE!",0,0);
buzzer.beep(2000, 0.4); ///@see This code was from a library I found
}
break;
case(5):
{
green1=1; ///case 5 would have 6 LED's on
green2=1;
yellow1=1;
yellow2=1;
red1=1;
red2=1;
lcd.printString("WATCH OUT!",0,0);
buzzer.beep(2000, 1.2); ///@see This code was from a library I found
}
break;
}}