Works with the parallax ping sensor. Uses a timer and interrupts to get the time and calculate the distance
Dependents: CatPot_2v00_T_Sub CatPot_2v10_T_Sub CatPot_2v20_T_Sub CatPot_2v30_T_Sub
Fork of Ping by
Ping.cpp
- Committer:
- lilac0112_1
- Date:
- 2016-03-10
- Revision:
- 3:b9760df91b3d
- Parent:
- 2:e252ca27589b
File content as of revision 3:b9760df91b3d:
#include "Ping.h" #include "mbed.h" Ping::Ping(PinName PING_PIN) : _event(PING_PIN) , _cmd(PING_PIN) , _timer() { _event.rise(this,&Ping::_Starts); _event.fall(this,&Ping::_Stops); _SPEED_OF_SOUND_CM = 33; } void Ping::_Starts(void) { _Valid = false; // start the timere, and invalidate the current time. _Busy = true; _timer.start(); _Time = _timer.read_us(); } void Ping::_Stops(void) { _Valid = true; // When it stops, update the time _Busy = false; _Time = _timer.read_us()-_Time; } void Ping::Send() { _cmd.output(); _cmd.write(0); // see the ping documentation http://www.parallax.com/Portals/0/Downloads/docs/prod/acc/28015-PING-v1.6.pdf wait_us(1); _cmd.write(1); wait_us(11); _cmd.write(0); _cmd.input(); } void Ping::Set_Speed_of_Sound(int SoS_ms ) { _SPEED_OF_SOUND_CM = SoS_ms; } int Ping::Read_cm() // -1 means not valid. { if(_Valid && ~_Busy) return ((_Time*_SPEED_OF_SOUND_CM)/1000/2); else return -1; }