A program designed to get the distance from an SRF02 distance sensor and create an audible and visual indication of that distance with data logging capabilities.

Dependencies:   N5110 PowerControl SRF02 mbed

Committer:
el13sr
Date:
Wed Apr 08 16:57:08 2015 +0000
Revision:
0:7d01de89a1ff
Child:
1:387d5e6fa05f
Working Sensor + Intro Screen

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el13sr 0:7d01de89a1ff 1 // Distance Sensor Project
el13sr 0:7d01de89a1ff 2 // Main File "main.cpp"
el13sr 0:7d01de89a1ff 3 // Designed By Sam Russell (200773195)
el13sr 0:7d01de89a1ff 4 // Date: 07/04/2015 || Version: 0.1
el13sr 0:7d01de89a1ff 5
el13sr 0:7d01de89a1ff 6 #include "mbed.h"
el13sr 0:7d01de89a1ff 7
el13sr 0:7d01de89a1ff 8 DigitalOut myled(LED1);
el13sr 0:7d01de89a1ff 9
el13sr 0:7d01de89a1ff 10 int main() {
el13sr 0:7d01de89a1ff 11 pc.baud(9600); //setting the baud rate
el13sr 0:7d01de89a1ff 12 timer.attach(&timerExpired,1);
el13sr 0:7d01de89a1ff 13 display.init(); // Initialise the display.
el13sr 0:7d01de89a1ff 14 display.clear(); // Clears the starting pattern from the screen.
el13sr 0:7d01de89a1ff 15 display.printString("--++--++--++--",0,0); //Print string of "" at x,y locations.
el13sr 0:7d01de89a1ff 16 display.printString("Distance",18,1);
el13sr 0:7d01de89a1ff 17 display.printString("Sensor",22,2);
el13sr 0:7d01de89a1ff 18 display.printString("--++--++--++--",0,3);
el13sr 0:7d01de89a1ff 19 display.printString("Sam Russell",10,4);
el13sr 0:7d01de89a1ff 20 display.printString("--++--++--++--",0,5);
el13sr 0:7d01de89a1ff 21 wait(2); //Delay between the introduction and the begining of the game.
el13sr 0:7d01de89a1ff 22 display.clear(); //Clears the display.
el13sr 0:7d01de89a1ff 23 drawRect(int 0,int 0,int 80,int 20,int 0)
el13sr 0:7d01de89a1ff 24 }
el13sr 0:7d01de89a1ff 25 }
el13sr 0:7d01de89a1ff 26
el13sr 0:7d01de89a1ff 27 while(1) {
el13sr 0:7d01de89a1ff 28 if(timerflag) {
el13sr 0:7d01de89a1ff 29 timerflag = 0;
el13sr 0:7d01de89a1ff 30 ///Read sensor distance in cm and print to the serial port.
el13sr 0:7d01de89a1ff 31 distance = avgDist();
el13sr 0:7d01de89a1ff 32 pc.printf("Distance = %.2f cm\n",distance);
el13sr 0:7d01de89a1ff 33 if(distance<75) {
el13sr 0:7d01de89a1ff 34 leds = 15;
el13sr 0:7d01de89a1ff 35 } else if(distance<150) {
el13sr 0:7d01de89a1ff 36 leds = 7;
el13sr 0:7d01de89a1ff 37 } else if(distance<275) {
el13sr 0:7d01de89a1ff 38 leds = 3;
el13sr 0:7d01de89a1ff 39 } else {
el13sr 0:7d01de89a1ff 40 leds = 1;
el13sr 0:7d01de89a1ff 41 }
el13sr 0:7d01de89a1ff 42 }
el13sr 0:7d01de89a1ff 43
el13sr 0:7d01de89a1ff 44 }
el13sr 0:7d01de89a1ff 45 }
el13sr 0:7d01de89a1ff 46
el13sr 0:7d01de89a1ff 47 //When timer expires set flag to equal 1.
el13sr 0:7d01de89a1ff 48 void timerExpired()
el13sr 0:7d01de89a1ff 49 {
el13sr 0:7d01de89a1ff 50 timerflag = 1;
el13sr 0:7d01de89a1ff 51 }
el13sr 0:7d01de89a1ff 52
el13sr 0:7d01de89a1ff 53 void error(int code)
el13sr 0:7d01de89a1ff 54 //ERROR CODE
el13sr 0:7d01de89a1ff 55 {
el13sr 0:7d01de89a1ff 56 while(1) {
el13sr 0:7d01de89a1ff 57 leds = 0;
el13sr 0:7d01de89a1ff 58 wait(0.25);
el13sr 0:7d01de89a1ff 59 leds = code;
el13sr 0:7d01de89a1ff 60 wait(0.25);
el13sr 0:7d01de89a1ff 61 }
el13sr 0:7d01de89a1ff 62 }
el13sr 0:7d01de89a1ff 63
el13sr 0:7d01de89a1ff 64 float avgDist()
el13sr 0:7d01de89a1ff 65 //Read the distance from the sensor every 10ms.
el13sr 0:7d01de89a1ff 66 //After 10 readings calculate the average and define that as the total distance.
el13sr 0:7d01de89a1ff 67 {
el13sr 0:7d01de89a1ff 68 float d1 = SRF02.getDistanceCm();
el13sr 0:7d01de89a1ff 69 wait(0.01);
el13sr 0:7d01de89a1ff 70 float d2 = SRF02.getDistanceCm();
el13sr 0:7d01de89a1ff 71 wait(0.01);
el13sr 0:7d01de89a1ff 72 float d3 = SRF02.getDistanceCm();
el13sr 0:7d01de89a1ff 73 wait(0.01);
el13sr 0:7d01de89a1ff 74 float d4 = SRF02.getDistanceCm();
el13sr 0:7d01de89a1ff 75 wait(0.01);
el13sr 0:7d01de89a1ff 76 float d5 = SRF02.getDistanceCm();
el13sr 0:7d01de89a1ff 77 wait(0.01);
el13sr 0:7d01de89a1ff 78 float d6 = SRF02.getDistanceCm();
el13sr 0:7d01de89a1ff 79 wait(0.01);
el13sr 0:7d01de89a1ff 80 float d7 = SRF02.getDistanceCm();
el13sr 0:7d01de89a1ff 81 wait(0.01);
el13sr 0:7d01de89a1ff 82 float d8 = SRF02.getDistanceCm();
el13sr 0:7d01de89a1ff 83 wait(0.01);
el13sr 0:7d01de89a1ff 84 float d9 = SRF02.getDistanceCm();
el13sr 0:7d01de89a1ff 85 wait(0.01);
el13sr 0:7d01de89a1ff 86 float d10 = SRF02.getDistanceCm();
el13sr 0:7d01de89a1ff 87 float distance = (d1+d2+d3+d4+d5+d6+d7+d8+d9+d10)/10;
el13sr 0:7d01de89a1ff 88 return distance;
el13sr 0:7d01de89a1ff 89 }
el13sr 0:7d01de89a1ff 90