NewPing Library: HC-SR04, SRF05, SRF06, DYP-ME007, Parallax PING))) - v1.7

robtillaart:
Agree with AWOL's proposal , especially as the original code mixes type (false=bool and ints)

you can even make it a macro:

#define convert_cm(echotime) ((echoTime) / US_ROUNDTRIP_CM)

After learning that false===0 in C++, I've had to rework some things. Basically, I want a ping to return false (zero) if there's no ping echo within the distance allowed. Also, if there is a ping echo, the result needs to be >0. We don't want to confuse a <1 inch ping echo with infinity as this difference would be very important to what you're using the sensor for.

In an case, I've reworked a bunch of the code to accommodate this and to give expected results. Here's the macro that's used for both cm and inch conversion:

#define _convert(echoTime, conversionFactor) (max(echoTime / conversionFactor, (echoTime ? 1 : 0)))

echoTime is obviously the microsecond time and conversionFactor is either US_ROUNDTRIP_CM or US_ROUNDTRIP_IN. It may appear that it's overly complex with code reduction possible. But, I need to make sure 0="no ping echo" and we never get a 0 for a really close range (happens with inches). If there's a better way do write this macro, let me know.

Tim