Library to use the ultrasonic sensor

Dependents:   test_ultrasonic AEB Car_Simulator

Committer:
AndreaAndreoli
Date:
Sat Jun 04 18:13:44 2016 +0000
Revision:
1:b3518845e71a
Parent:
0:72ec72845f71
Child:
2:12da800fd10a
Added timeout for error handling;

Who changed what in which revision?

UserRevisionLine numberNew 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 0:72ec72845f71 37 trigger = 1;
AndreaAndreoli 0:72ec72845f71 38 wait_us(10);
AndreaAndreoli 0:72ec72845f71 39 trigger = 0;
AndreaAndreoli 1:b3518845e71a 40 timeout.attach(&timeout_err, 0.05);
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 }