Control Surface master
MIDI Control Surface library for Arduino
Public Member Functions | Private Attributes | Static Private Attributes | List of all members
Hysteresis< BITS, T_in, T_out > Class Template Reference

#include <AH/Filters/Hysteresis.hpp>

Detailed Description

template<uint8_t BITS, class T_in = uint16_t, class T_out = uint8_t>
class Hysteresis< BITS, T_in, T_out >

A class for applying hysteresis to a given input.

This reduces the noise by decreasing the resolution, and it prevents flipping back and forth between two values.

An example for BITS = 7 and an input from 0 to 1023

7 ┌───◄───┬───
o 6 ┌───◄───┼───►───┘
u 5 ┌───◄───┼───►───┘
t 4 ┌───◄───┼───►───┘
p 3 ┌───◄───┼───►───┘
u 2 ┌───◄───┼───►───┘
t 1 ┌───◄───┼───►───┘
0 ────┴───►───┘
0 128 256 384 512 640 768 896 1023
i n p u t
Template Parameters
BITSThe number of bits to decrease in resolution. Increasing this number will result in a decrease in fluctuations.

Definition at line 36 of file Hysteresis.hpp.

+ Collaboration diagram for Hysteresis< BITS, T_in, T_out >:

Public Member Functions

bool update (T_in inputLevel)
 Update the hysteresis output with a new input value. More...
 
T_out getValue () const
 Get the current output level. More...
 
void setValue (T_in inputLevel)
 Forcefully update the internal state to the given level. More...
 

Private Attributes

T_out prevLevel = 0
 

Static Private Attributes

constexpr static T_in margin = (1UL << BITS) - 1
 
constexpr static T_in offset = 1UL << (BITS - 1)
 
constexpr static T_in max_in = -1
 
constexpr static T_out max_out = static_cast<T_out>(max_in >> BITS)
 

Member Function Documentation

◆ update()

bool update ( T_in  inputLevel)
inline

Update the hysteresis output with a new input value.

Parameters
inputLevelThe input to calculate the output level from.
Return values
trueThe output level has changed.
falseThe output level is still the same.

Definition at line 48 of file Hysteresis.hpp.

◆ getValue()

T_out getValue ( ) const
inline

Get the current output level.

Returns
The output level.

Definition at line 64 of file Hysteresis.hpp.

◆ setValue()

void setValue ( T_in  inputLevel)
inline

Forcefully update the internal state to the given level.

Definition at line 69 of file Hysteresis.hpp.

Member Data Documentation

◆ prevLevel

T_out prevLevel = 0
private

Definition at line 72 of file Hysteresis.hpp.

◆ margin

constexpr static T_in margin = (1UL << BITS) - 1
staticconstexprprivate

Definition at line 73 of file Hysteresis.hpp.

◆ offset

constexpr static T_in offset = 1UL << (BITS - 1)
staticconstexprprivate

Definition at line 74 of file Hysteresis.hpp.

◆ max_in

constexpr static T_in max_in = -1
staticconstexprprivate

Definition at line 75 of file Hysteresis.hpp.

◆ max_out

constexpr static T_out max_out = static_cast<T_out>(max_in >> BITS)
staticconstexprprivate

Definition at line 76 of file Hysteresis.hpp.


The documentation for this class was generated from the following file: