![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
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
main.cpp@0:7d01de89a1ff, 2015-04-08 (annotated)
- 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?
User | Revision | Line number | New 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 |