Library for interfacing with the Parallax Ping))) sensor.
Diff: ping.cpp
- Revision:
- 3:0c337c262d84
- Parent:
- 1:72fbcb01291d
- Child:
- 5:cbe07c09c64c
--- a/ping.cpp Sun Jul 27 19:55:41 2014 +0000 +++ b/ping.cpp Mon Jul 28 00:16:34 2014 +0000 @@ -1,6 +1,6 @@ #include "ping.h" -Ping::Ping(PinName signalPin) : mSignalIo(signalPin, PIN_OUTPUT, PullDown, 0), mEvent(signalPin), +Ping::Ping(PinName signalPin) : mSignalIo(signalPin), mEvent(signalPin), mBusy(0), mValid(0), mContinuous(0), mTimer(), mRawReading(0) { mEvent.rise(this, &Ping::start); mEvent.fall(this, &Ping::stop); @@ -15,10 +15,11 @@ if (mBusy) return false; mSignalIo.output(); - mSignalIo = 0; - wait_us(2); - mSignalIo = 1; - wait_us(10); + mSignalIo.write(0); + wait_us(3); + mSignalIo.write(1); + wait_us(3); + mSignalIo.write(0); mSignalIo.input(); return true; @@ -27,15 +28,15 @@ void Ping::start() { mBusy = true; mValid = false; + mTimer.reset(); mTimer.start(); - mStartTime = mTimer.read_us(); } void Ping::stop() { mBusy = false; mValid = true; // The time it takes is for a round trip. We divide by two to get the time for one way. - mRawReading = (mTimer.read_us() - mStartTime) >> 1; + mRawReading = mTimer.read_us() >> 1; mTimer.stop(); mCallback.call(mRawReading); if (mContinuous) mMeasureDelayTicker.attach_us(this, &Ping::nextMeasurement, 5000);