9#include <AH/STL/type_traits>
10#include <AH/STL/utility>
19template <u
int8_t FilterShiftFactor,
class FilterType,
class AnalogType>
129 return hysteresis.update(
input);
161 AnalogType value = ExtIO::analogRead(analogPin);
184#if HAS_ANALOG_READ_RESOLUTION
193 template <
typename M = MappingFunction>
194 typename std::enable_if<std::is_constructible<bool, M>::value,
204 template <
typename M = MappingFunction>
205 typename std::enable_if<!std::is_constructible<bool, M>::value,
219 "Error: FilterType is not wide enough to hold the maximum value");
222 "Error: AnalogType is not wide enough to hold the maximum value");
225 "Error: Precision is larger than the increased ADC precision");
226 static_assert(EMA_t::supports_range(
AnalogType(0), getMaxRawValue()),
227 "Error: EMA filter type doesn't support full ADC range");
274 FilterShiftFactor, FilterType, AnalogType,
#define BEGIN_AH_NAMESPACE
AH::function_traits< decltype(::digitalWrite)>::argument_t< 0 > ArduinoPin_t
analog_t(*)(analog_t) MappingFunction
A class that reads and filters an analog input.
FilteredAnalog(pin_t analogPin, AnalogType initial=0)
Construct a new FilteredAnalog object.
FilteredAnalog(ArduinoPin_t analogPin, AnalogType initial=0)
Construct a new FilteredAnalog object.
FilteredAnalog()
Construct a new FilteredAnalog object.
void invert()
Invert the analog value.
FilteredAnalog base class with generic MappingFunction.
GenericFilteredAnalog(pin_t analogPin, MappingFunction mapFn, AnalogType initial=0)
Construct a new GenericFilteredAnalog object.
void resetToCurrentValue()
Reset the filtered value to the value that's currently being measured at the analog input.
static void setupADC()
Select the configured ADC resolution.
std::enable_if<!std::is_constructible< bool, M >::value, AnalogType >::type mapFnHelper(AnalogType input)
Helper function that applies the mapping function without checking if it's enabled.
void map(MappingFunction fn)
Specify a mapping function/functor that is applied to the analog value after filtering and before app...
AnalogType getRawValue() const
Read the raw value of the analog input without any filtering or mapping applied, but with its bit dep...
void reset(AnalogType value=0)
Reset the filter to the given value.
std::enable_if< std::is_constructible< bool, M >::value, AnalogType >::type mapFnHelper(AnalogType input)
Helper function that applies the mapping function if it's enabled.
AnalogType getValue() const
Get the filtered value of the analog input (with the mapping function applied).
float getFloatValue() const
Get the filtered value of the analog input with the mapping function applied as a floating point numb...
bool update()
Read the analog input value, apply the mapping function, and update the average.
MappingFunction & getMappingFunction()
Get a reference to the mapping function.
GenericFilteredAnalog(ArduinoPin_t analogPin, MappingFunction mapFn, AnalogType initial=0)
Construct a new GenericFilteredAnalog object.
Hysteresis< ADC_BITS+IncRes - Precision, AnalogType, AnalogType > hysteresis
const MappingFunction & getMappingFunction() const
Get a reference to the mapping function.
static constexpr AnalogType getMaxRawValue()
Get the maximum value that can be returned from getRawValue.
A class for applying hysteresis to a given input.
A class for serial-in/parallel-out shift registers, like the 74HC595 that are connected to the SPI bu...
T_out increaseBitDepth(T_in in)
Increase the bit depth of the given value from Bits_in bits wide to Bits_out bits wide,...
constexpr uint8_t ANALOG_FILTER_SHIFT_FACTOR
The factor for the analog filter: Difference equation: where .
constexpr uint8_t ADC_BITS
The bit depth to use for the ADC (Analog to Digital Converter).
Type for storing pin numbers of Extended Input/Output elements.
Helper to determine how many of the remaining bits of the filter data types can be used to achieve hi...