2#include "../../../../utilities/Utilities.hpp"
5const float kTimeToTravelOneCmAndBack = 29.15F * 2.0F;
6const unsigned long kTimeToMeasureOneCm = 120;
9const unsigned long kMedianMeasurementDelay = 15;
17 : kTriggerPin{ triggerPin }
20 , kTimeout{ kMaxDistance * kTimeToMeasureOneCm }
22 , kOutput{ mRuntime.getOutputState() }
23 , kInput{ mRuntime.getInputState() }
24 , kLow{ mRuntime.getLowState() }
25 , kHigh{ mRuntime.getHighState() }
46 static constexpr auto kSetPinToKnownStateDelay = 5;
49 static constexpr auto kTenMicrosecondPulse = 10;
55 auto calculatedDistance
56 =
static_cast<unsigned int>(
static_cast<float>(duration) / kTimeToTravelOneCmAndBack);
58 return calculatedDistance <= kMaxDistance ? calculatedDistance :
kError;
69 for (
auto i = 0; i < iterations; i++)
75 return getMedian(measurements, iterations);
An interface to serve as a wrapper for the native runtime environment, greatly inspired by the Arduin...
virtual void delayMicros(unsigned int microseconds)=0
Block the execution for the specified number of microseconds, equivalent of delayMicroseconds in Ardu...
virtual void delayMillis(unsigned long milliseconds)=0
Block the execution for the specified number of milliseconds, equivalent of delay in Arduino.
virtual void setPinDirection(uint8_t pin, uint8_t direction)=0
Set pin direction, equivalent of pinMode in Arduino.
virtual unsigned long getPulseDuration(uint8_t pin, uint8_t state, unsigned long timeout)=0
Gets the incomming pulse length in microseconds starting from the nearest state, equivalent to pulseI...
virtual void setPinState(uint8_t pin, uint8_t state)=0
Set pin state, equivalent of digitalWrite in Arduino.
unsigned int getMedianDistance(uint8_t iterations=smartcarlib::constants::sr04::kDefaultIterations) override
Gets the median distance from the specified number of measurements.
SR04(Runtime &runtime, uint8_t triggerPin, uint8_t echoPin, unsigned int maxDistance=smartcarlib::constants::sr04::kDefaultMaxDistance)
Constructs an SR04 ultrasonic sensor.
unsigned int getDistance() override
Gets the distance measured by the sensor in centimeters.
const int kMaxMedianMeasurements
const unsigned int kError
const unsigned int kDefaultMaxDistance
AnyNumber getMedian(AnyNumber unsortedNumbers[], const unsigned int &arraySize)
Gets the median value out of the supplied number array.