2018/3/20 publish

Fork of Ping by Tomo Suzu

Committer:
Tomo073
Date:
Tue Mar 20 12:45:11 2018 +0000
Revision:
0:a51e9c49571a
2018/3/20;

Who changed what in which revision?

UserRevisionLine numberNew 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 }