Library to use the ultrasonic sensor
Dependents: test_ultrasonic AEB Car_Simulator
Ultrasonic.cpp@2:12da800fd10a, 2016-06-04 (annotated)
- Committer:
- AndreaAndreoli
- Date:
- Sat Jun 04 18:23:50 2016 +0000
- Revision:
- 2:12da800fd10a
- Parent:
- 1:b3518845e71a
- Child:
- 3:9b06e5793b8b
fixed bug timeout;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AndreaAndreoli | 0:72ec72845f71 | 1 | #include "mbed.h" |
AndreaAndreoli | 0:72ec72845f71 | 2 | #include "Ultrasonic.h" |
AndreaAndreoli | 0:72ec72845f71 | 3 | |
AndreaAndreoli | 0:72ec72845f71 | 4 | |
AndreaAndreoli | 0:72ec72845f71 | 5 | float DistanceCM = 0; |
AndreaAndreoli | 0:72ec72845f71 | 6 | DigitalOut trigger(TRIGGER); |
AndreaAndreoli | 0:72ec72845f71 | 7 | InterruptIn echo(ECHO); // Attach interrupt to the echo pin |
AndreaAndreoli | 0:72ec72845f71 | 8 | Timer timer; |
AndreaAndreoli | 0:72ec72845f71 | 9 | Ticker tick; |
AndreaAndreoli | 1:b3518845e71a | 10 | Timeout timeout; |
AndreaAndreoli | 0:72ec72845f71 | 11 | |
AndreaAndreoli | 0:72ec72845f71 | 12 | /* |
AndreaAndreoli | 0:72ec72845f71 | 13 | * Call this function and it will return the distance in centimeter |
AndreaAndreoli | 0:72ec72845f71 | 14 | */ |
AndreaAndreoli | 0:72ec72845f71 | 15 | float read_cm() |
AndreaAndreoli | 0:72ec72845f71 | 16 | { |
AndreaAndreoli | 0:72ec72845f71 | 17 | return DistanceCM; |
AndreaAndreoli | 0:72ec72845f71 | 18 | } |
AndreaAndreoli | 0:72ec72845f71 | 19 | |
AndreaAndreoli | 0:72ec72845f71 | 20 | |
AndreaAndreoli | 0:72ec72845f71 | 21 | void start() |
AndreaAndreoli | 0:72ec72845f71 | 22 | { |
AndreaAndreoli | 0:72ec72845f71 | 23 | timer.start(); |
AndreaAndreoli | 0:72ec72845f71 | 24 | } |
AndreaAndreoli | 0:72ec72845f71 | 25 | |
AndreaAndreoli | 0:72ec72845f71 | 26 | void stop() |
AndreaAndreoli | 0:72ec72845f71 | 27 | { |
AndreaAndreoli | 0:72ec72845f71 | 28 | DistanceCM = timer.read_us()/58; |
AndreaAndreoli | 0:72ec72845f71 | 29 | timer.stop(); |
AndreaAndreoli | 0:72ec72845f71 | 30 | //pc.printf("Distance: %f \n", DistanceCM); |
AndreaAndreoli | 0:72ec72845f71 | 31 | timer.reset(); |
AndreaAndreoli | 1:b3518845e71a | 32 | timeout.detach(); |
AndreaAndreoli | 0:72ec72845f71 | 33 | } |
AndreaAndreoli | 0:72ec72845f71 | 34 | |
AndreaAndreoli | 0:72ec72845f71 | 35 | void trig() |
AndreaAndreoli | 0:72ec72845f71 | 36 | { |
AndreaAndreoli | 2:12da800fd10a | 37 | timeout.attach(&timeout_err, 0.05); |
AndreaAndreoli | 0:72ec72845f71 | 38 | trigger = 1; |
AndreaAndreoli | 0:72ec72845f71 | 39 | wait_us(10); |
AndreaAndreoli | 0:72ec72845f71 | 40 | trigger = 0; |
AndreaAndreoli | 0:72ec72845f71 | 41 | } |
AndreaAndreoli | 0:72ec72845f71 | 42 | |
AndreaAndreoli | 0:72ec72845f71 | 43 | |
AndreaAndreoli | 0:72ec72845f71 | 44 | void Ultrasonic_init() |
AndreaAndreoli | 0:72ec72845f71 | 45 | { |
AndreaAndreoli | 0:72ec72845f71 | 46 | timer.reset(); |
AndreaAndreoli | 0:72ec72845f71 | 47 | echo.rise(&start); |
AndreaAndreoli | 0:72ec72845f71 | 48 | echo.fall(&stop); |
AndreaAndreoli | 0:72ec72845f71 | 49 | tick.attach(&trig,0.06); |
AndreaAndreoli | 1:b3518845e71a | 50 | } |
AndreaAndreoli | 1:b3518845e71a | 51 | |
AndreaAndreoli | 1:b3518845e71a | 52 | void timeout_err() |
AndreaAndreoli | 1:b3518845e71a | 53 | { |
AndreaAndreoli | 1:b3518845e71a | 54 | // Timeout elapsed -> there is some problem |
AndreaAndreoli | 1:b3518845e71a | 55 | // out the distance to zero to highligth error |
AndreaAndreoli | 1:b3518845e71a | 56 | |
AndreaAndreoli | 1:b3518845e71a | 57 | DistanceCM = 0; |
AndreaAndreoli | 0:72ec72845f71 | 58 | } |