Library for interfacing with the Parallax Ping))) sensor.
ping.cpp@0:99ee7c741e9d, 2014-07-27 (annotated)
- Committer:
- d34d
- Date:
- Sun Jul 27 19:12:34 2014 +0000
- Revision:
- 0:99ee7c741e9d
- Child:
- 1:72fbcb01291d
Initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
d34d | 0:99ee7c741e9d | 1 | #include "ping.h" |
d34d | 0:99ee7c741e9d | 2 | |
d34d | 0:99ee7c741e9d | 3 | Ping::Ping(PinName signalPin) : mSignalIo(signalPin, PIN_OUTPUT, PullDown, 0), mEvent(signalPin), |
d34d | 0:99ee7c741e9d | 4 | mBusy(0), mValid(0), mContinuous(0), mTimer(), mRawReading(0) { |
d34d | 0:99ee7c741e9d | 5 | mEvent.rise(this, &Ping::start); |
d34d | 0:99ee7c741e9d | 6 | mEvent.fall(this, &Ping::stop); |
d34d | 0:99ee7c741e9d | 7 | } |
d34d | 0:99ee7c741e9d | 8 | |
d34d | 0:99ee7c741e9d | 9 | bool Ping::startReading() { |
d34d | 0:99ee7c741e9d | 10 | return this->startReading(false); |
d34d | 0:99ee7c741e9d | 11 | } |
d34d | 0:99ee7c741e9d | 12 | |
d34d | 0:99ee7c741e9d | 13 | bool Ping::startReading(bool continuous) { |
d34d | 0:99ee7c741e9d | 14 | mContinuous = continuous; |
d34d | 0:99ee7c741e9d | 15 | if (mBusy) return false; |
d34d | 0:99ee7c741e9d | 16 | |
d34d | 0:99ee7c741e9d | 17 | mSignalIo.output(); |
d34d | 0:99ee7c741e9d | 18 | mSignalIo = 0; |
d34d | 0:99ee7c741e9d | 19 | wait_us(2); |
d34d | 0:99ee7c741e9d | 20 | mSignalIo = 1; |
d34d | 0:99ee7c741e9d | 21 | wait_us(10); |
d34d | 0:99ee7c741e9d | 22 | mSignalIo.input(); |
d34d | 0:99ee7c741e9d | 23 | |
d34d | 0:99ee7c741e9d | 24 | return true; |
d34d | 0:99ee7c741e9d | 25 | } |
d34d | 0:99ee7c741e9d | 26 | |
d34d | 0:99ee7c741e9d | 27 | void Ping::start() { |
d34d | 0:99ee7c741e9d | 28 | mBusy = true; |
d34d | 0:99ee7c741e9d | 29 | mValid = false; |
d34d | 0:99ee7c741e9d | 30 | mTimer.start(); |
d34d | 0:99ee7c741e9d | 31 | mStartTime = mTimer.read_us(); |
d34d | 0:99ee7c741e9d | 32 | } |
d34d | 0:99ee7c741e9d | 33 | |
d34d | 0:99ee7c741e9d | 34 | void Ping::stop() { |
d34d | 0:99ee7c741e9d | 35 | mBusy = false; |
d34d | 0:99ee7c741e9d | 36 | mValid = true; |
d34d | 0:99ee7c741e9d | 37 | // The time it takes is for a round trip. We divide by two to get the time for one way. |
d34d | 0:99ee7c741e9d | 38 | mRawReading = (mTimer.read_us() - mStartTime) >> 1; |
d34d | 0:99ee7c741e9d | 39 | mTimer.stop(); |
d34d | 0:99ee7c741e9d | 40 | mCallback.call(mRawReading); |
d34d | 0:99ee7c741e9d | 41 | if (mContinuous) this->startReading(mContinuous); |
d34d | 0:99ee7c741e9d | 42 | } |