Library to use the ultrasonic sensor

Dependents:   test_ultrasonic AEB Car_Simulator

Committer:
AndreaAndreoli
Date:
Sun Jun 05 14:29:33 2016 +0000
Revision:
4:8c97476a5ebf
Parent:
3:9b06e5793b8b
Child:
5:549b453cd6ce
fixed class bug (everything is working now !!!!!!)

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 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 4:8c97476a5ebf 40 wait_us(10);
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 }