13 static constexpr uint64_t kDefaultDebounceDurationMs = 20;
15 Debouncer(
const T& value, uint64_t debounce_duration_ms = kDefaultDebounceDurationMs)
16 : debouncing_value_(value), last_value_(value), debounce_duration_ms_(debounce_duration_ms) {
19 const T& Debounce(
const T& value) {
20 if (start_debounce_time_ == UINT64_MAX || value != debouncing_value_) {
21 debouncing_value_ = value;
22 start_debounce_time_ = millis();
23 }
else if (last_value_ != debouncing_value_ && millis() - start_debounce_time_ >= debounce_duration_ms_) {
24 last_value_ = debouncing_value_;
30 inline const T& operator()(
const T& value) {
31 return Debounce(value);
34 inline const T& operator=(
const T& value) {
35 return Debounce(value);
38 inline const T& operator()()
const {
45 const uint64_t debounce_duration_ms_ = kDefaultDebounceDurationMs;
46 uint64_t start_debounce_time_ = UINT64_MAX;