Library for interfacing with the Parallax Ping))) sensor.

Dependencies:   FPointer

Committer:
d34d
Date:
Sun Jul 27 19:45:01 2014 +0000
Revision:
1:72fbcb01291d
Parent:
0:99ee7c741e9d
Child:
3:0c337c262d84
Use ticker to delay continuous readings.

Who changed what in which revision?

UserRevisionLine numberNew 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 1:72fbcb01291d 41 if (mContinuous) mMeasureDelayTicker.attach_us(this, &Ping::nextMeasurement, 5000);
d34d 1:72fbcb01291d 42 }
d34d 1:72fbcb01291d 43
d34d 1:72fbcb01291d 44 void Ping::nextMeasurement() {
d34d 1:72fbcb01291d 45 mMeasureDelayTicker.detach();
d34d 1:72fbcb01291d 46 this->startReading(mContinuous);
d34d 0:99ee7c741e9d 47 }