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

Dependencies:   FPointer

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);