2018/3/20 publish
Fork of Ping by
Ping.cpp@0:a51e9c49571a, 2018-03-20 (annotated)
- Committer:
- Tomo073
- Date:
- Tue Mar 20 12:45:11 2018 +0000
- Revision:
- 0:a51e9c49571a
2018/3/20;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Tomo073 | 0:a51e9c49571a | 1 | #include "Ping.h" |
Tomo073 | 0:a51e9c49571a | 2 | |
Tomo073 | 0:a51e9c49571a | 3 | #include "mbed.h" |
Tomo073 | 0:a51e9c49571a | 4 | |
Tomo073 | 0:a51e9c49571a | 5 | Ping::Ping(PinName PING_PIN) |
Tomo073 | 0:a51e9c49571a | 6 | : _event(PING_PIN) |
Tomo073 | 0:a51e9c49571a | 7 | , _cmd(PING_PIN) |
Tomo073 | 0:a51e9c49571a | 8 | , _timer() |
Tomo073 | 0:a51e9c49571a | 9 | { |
Tomo073 | 0:a51e9c49571a | 10 | _event.rise(this,&Ping::_Starts); |
Tomo073 | 0:a51e9c49571a | 11 | _event.fall(this,&Ping::_Stops); |
Tomo073 | 0:a51e9c49571a | 12 | _SPEED_OF_SOUND_CM = 33; |
Tomo073 | 0:a51e9c49571a | 13 | } |
Tomo073 | 0:a51e9c49571a | 14 | |
Tomo073 | 0:a51e9c49571a | 15 | void Ping::_Starts(void) |
Tomo073 | 0:a51e9c49571a | 16 | { |
Tomo073 | 0:a51e9c49571a | 17 | _Valid = false; // start the timere, and invalidate the current time. |
Tomo073 | 0:a51e9c49571a | 18 | _Busy = true; |
Tomo073 | 0:a51e9c49571a | 19 | _timer.start(); |
Tomo073 | 0:a51e9c49571a | 20 | _Time = _timer.read_us(); |
Tomo073 | 0:a51e9c49571a | 21 | } |
Tomo073 | 0:a51e9c49571a | 22 | |
Tomo073 | 0:a51e9c49571a | 23 | void Ping::_Stops(void) |
Tomo073 | 0:a51e9c49571a | 24 | { |
Tomo073 | 0:a51e9c49571a | 25 | _Valid = true; // When it stops, update the time |
Tomo073 | 0:a51e9c49571a | 26 | _Busy = false; |
Tomo073 | 0:a51e9c49571a | 27 | _Time = _timer.read_us()-_Time; |
Tomo073 | 0:a51e9c49571a | 28 | } |
Tomo073 | 0:a51e9c49571a | 29 | |
Tomo073 | 0:a51e9c49571a | 30 | void Ping::Send() |
Tomo073 | 0:a51e9c49571a | 31 | { |
Tomo073 | 0:a51e9c49571a | 32 | |
Tomo073 | 0:a51e9c49571a | 33 | _cmd.output(); |
Tomo073 | 0:a51e9c49571a | 34 | _cmd.write(0); // see the ping documentation http://www.parallax.com/Portals/0/Downloads/docs/prod/acc/28015-PING-v1.6.pdf |
Tomo073 | 0:a51e9c49571a | 35 | wait_us(3); |
Tomo073 | 0:a51e9c49571a | 36 | _cmd.write(1); |
Tomo073 | 0:a51e9c49571a | 37 | wait_us(3); |
Tomo073 | 0:a51e9c49571a | 38 | _cmd.write(0); |
Tomo073 | 0:a51e9c49571a | 39 | _cmd.input(); |
Tomo073 | 0:a51e9c49571a | 40 | |
Tomo073 | 0:a51e9c49571a | 41 | } |
Tomo073 | 0:a51e9c49571a | 42 | void Ping::Set_Speed_of_Sound(int SoS_ms ) |
Tomo073 | 0:a51e9c49571a | 43 | { |
Tomo073 | 0:a51e9c49571a | 44 | _SPEED_OF_SOUND_CM = SoS_ms; |
Tomo073 | 0:a51e9c49571a | 45 | } |
Tomo073 | 0:a51e9c49571a | 46 | |
Tomo073 | 0:a51e9c49571a | 47 | int Ping::Read_cm() |
Tomo073 | 0:a51e9c49571a | 48 | // -1 means not valid. |
Tomo073 | 0:a51e9c49571a | 49 | { |
Tomo073 | 0:a51e9c49571a | 50 | if(_Valid && ~_Busy) |
Tomo073 | 0:a51e9c49571a | 51 | return ((_Time*_SPEED_OF_SOUND_CM)/1000); |
Tomo073 | 0:a51e9c49571a | 52 | else |
Tomo073 | 0:a51e9c49571a | 53 | return -1; |
Tomo073 | 0:a51e9c49571a | 54 | } |