4.0 KiB
MINMAX
Library for finding peaks (minimum and maximum) in a signal.
Description
The MINMAX library is a simple peak finder in a stream of floats.
The add() function indicates after adding a number if the minimum and/or the maximum value has been changed by means of a bit flag which is returned. If a peak is found, it will be used as the new minimum() or maximum() until a call to reset().
The library can reset() the minimum and maximum to 0 to start again. The first add() after the reset() will set the minimum and maximum to the value added.
The library has the option to auto-reset after a predefined number of add() calls.
Finally the library keeps track when the last peaks occurred.
Interface
Core
- MINMAX Constructor,
- uint8_t add(float value) add next value. Returns status (bit flags), see table below.
- void reset() resets the minimum and maximum to 0.
- float minimum() returns last minimum. Can be higher than previous call due to reset() or autoReset(). If no call to add() is made yet it will return 0.
- float maximum() returns last maximum. Can be lower than previous call due to reset() or autoReset(). If no call to add() is made yet it will return 0.
- lastValue() returns last value added.
AutoReset
- uint32_t count() returns number of add() calls since last (auto)reset.
- void setAutoResetCount(uint32_t count) sets an auto-reset moment after count calls to add(). There will be at least one value processed. When count is set to 0, there will be no autoReset.
- uint32_t getAutoResetCount() returns set value.
Timestamps
- lastMin() timestamp in millis() when minimum was last updated.
- lastMax() timestamp in millis() when maximum was last updated.
Return flags add()
Return flags of add() - is a bit mask.
flag | value | description |
---|---|---|
MINMAX_NO_CHANGE | 0x00 | no change |
MINMAX_MIN_CHANGED | 0x01 | minimum changed |
MINMAX_MAX_CHANGED | 0x02 | maximum changed |
MINMAX_RESET_DONE | 0x80 | reset done |
NOTE: After a reset() the next add() will return both MINMAX_MIN_CHANGED and MINMAX_MAX_CHANGED (0x03)
NOTE: After an autoReset in add() it will return 0x83.
CallBack
- void addCallBack( void (* func)(void) ) add a function to be called when the minimum or the maximum has changed. See examples.
Obsolete
- void autoReset(uint32_t count) obsolete since 0.2.0 Replaced by void setAutoResetCount()
Operation
The examples show the basic working of the functions.
Future
must
should
- separate call back for MINMAX_MIN_CHANGED and MINMAX_MAX_CHANGED
- add getLastEvent()?
- add AVG average() sum()
- like a digital multimeter (DMM)
- sum() would be sufficient as average can be derived.
could
- Template class to allow other types
- int32_t uint64_t double etc.
- now you loose precision
wont (unless)
- thresholds, windowing + triggers (separate class?)
- auto-reset after time? (would affect all functions ?)
- need a uint32_t start;
- need a uint32_t threshold;
- millis() - start > threshold) => action.
- should be tested for in every function call.