Library to use the ultrasonic sensor
Dependents: test_ultrasonic AEB Car_Simulator
Ultrasonic.cpp@5:549b453cd6ce, 2016-07-09 (annotated)
- Committer:
- AndreaAndreoli
- Date:
- Sat Jul 09 12:14:55 2016 +0000
- Revision:
- 5:549b453cd6ce
- Parent:
- 4:8c97476a5ebf
increased impulse time for trigger, needed for myrio;
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 | 3:9b06e5793b8b | 5 | Ultrasonic::Ultrasonic(PinName trigger, PinName echo): _trigger(trigger) , _echo(echo) |
AndreaAndreoli | 3:9b06e5793b8b | 6 | { |
AndreaAndreoli | 3:9b06e5793b8b | 7 | Ultrasonic_init(); |
AndreaAndreoli | 3:9b06e5793b8b | 8 | } |
AndreaAndreoli | 3:9b06e5793b8b | 9 | |
AndreaAndreoli | 3:9b06e5793b8b | 10 | int Ultrasonic::read_cm() |
AndreaAndreoli | 0:72ec72845f71 | 11 | { |
AndreaAndreoli | 0:72ec72845f71 | 12 | return DistanceCM; |
AndreaAndreoli | 0:72ec72845f71 | 13 | } |
AndreaAndreoli | 0:72ec72845f71 | 14 | |
AndreaAndreoli | 3:9b06e5793b8b | 15 | void Ultrasonic::start() |
AndreaAndreoli | 0:72ec72845f71 | 16 | { |
AndreaAndreoli | 0:72ec72845f71 | 17 | timer.start(); |
AndreaAndreoli | 0:72ec72845f71 | 18 | } |
AndreaAndreoli | 0:72ec72845f71 | 19 | |
AndreaAndreoli | 3:9b06e5793b8b | 20 | void Ultrasonic::stop() |
AndreaAndreoli | 0:72ec72845f71 | 21 | { |
AndreaAndreoli | 4:8c97476a5ebf | 22 | DistanceCM = int(timer.read_us()/58); |
AndreaAndreoli | 0:72ec72845f71 | 23 | timer.stop(); |
AndreaAndreoli | 0:72ec72845f71 | 24 | timer.reset(); |
AndreaAndreoli | 1:b3518845e71a | 25 | timeout.detach(); |
AndreaAndreoli | 0:72ec72845f71 | 26 | } |
AndreaAndreoli | 0:72ec72845f71 | 27 | |
AndreaAndreoli | 3:9b06e5793b8b | 28 | void Ultrasonic::timeout_err() |
AndreaAndreoli | 1:b3518845e71a | 29 | { |
AndreaAndreoli | 1:b3518845e71a | 30 | // Timeout elapsed -> there is some problem |
AndreaAndreoli | 1:b3518845e71a | 31 | // out the distance to zero to highligth error |
AndreaAndreoli | 1:b3518845e71a | 32 | |
AndreaAndreoli | 1:b3518845e71a | 33 | DistanceCM = 0; |
AndreaAndreoli | 4:8c97476a5ebf | 34 | } |
AndreaAndreoli | 4:8c97476a5ebf | 35 | |
AndreaAndreoli | 4:8c97476a5ebf | 36 | void Ultrasonic::trig() |
AndreaAndreoli | 4:8c97476a5ebf | 37 | { |
AndreaAndreoli | 4:8c97476a5ebf | 38 | timeout.attach(this, &Ultrasonic::timeout_err, 0.05); |
AndreaAndreoli | 4:8c97476a5ebf | 39 | _trigger = 1; |
AndreaAndreoli | 5:549b453cd6ce | 40 | wait_us(500); |
AndreaAndreoli | 4:8c97476a5ebf | 41 | _trigger = 0; |
AndreaAndreoli | 4:8c97476a5ebf | 42 | } |
AndreaAndreoli | 4:8c97476a5ebf | 43 | |
AndreaAndreoli | 4:8c97476a5ebf | 44 | void Ultrasonic::Ultrasonic_init() |
AndreaAndreoli | 4:8c97476a5ebf | 45 | { |
AndreaAndreoli | 4:8c97476a5ebf | 46 | DistanceCM = 0; |
AndreaAndreoli | 4:8c97476a5ebf | 47 | timer.reset(); |
AndreaAndreoli | 4:8c97476a5ebf | 48 | _echo.rise(this,&Ultrasonic::start); |
AndreaAndreoli | 4:8c97476a5ebf | 49 | _echo.fall(this,&Ultrasonic::stop); |
AndreaAndreoli | 4:8c97476a5ebf | 50 | tick.attach(this,&Ultrasonic::trig,0.06); |
AndreaAndreoli | 4:8c97476a5ebf | 51 | } |