mirror of
https://github.com/clockworkpi/DevTerm.git
synced 2025-12-12 18:28:50 +01:00
54 lines
747 B
C++
54 lines
747 B
C++
#ifndef DEBOUNCER_H
|
|
#define DEBOUNCER_H
|
|
|
|
#include <cstdint>
|
|
|
|
typedef uint8_t millis_t;
|
|
|
|
const millis_t DEBOUNCE_MS = 5;
|
|
|
|
/**
|
|
@brief Asymmetric debouncer
|
|
*/
|
|
class Debouncer {
|
|
public:
|
|
Debouncer();
|
|
void updateTime(millis_t delta);
|
|
bool sample(bool value);
|
|
private:
|
|
millis_t timeout;
|
|
};
|
|
|
|
template<typename T, T millis>
|
|
class Timeout {
|
|
public:
|
|
Timeout() {
|
|
timeout = 0;
|
|
}
|
|
|
|
void updateTime(millis_t delta) {
|
|
if (timeout > delta) {
|
|
timeout -= delta;
|
|
} else {
|
|
timeout = 0;
|
|
}
|
|
}
|
|
|
|
void expire() {
|
|
timeout = 0;
|
|
}
|
|
|
|
bool get() const {
|
|
return timeout == 0;
|
|
}
|
|
|
|
void reset() {
|
|
timeout = millis;
|
|
}
|
|
private:
|
|
uint16_t timeout;
|
|
};
|
|
|
|
|
|
#endif
|