debouncer.h 747 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #ifndef DEBOUNCER_H
  2. #define DEBOUNCER_H
  3. #include <cstdint>
  4. typedef uint8_t millis_t;
  5. const millis_t DEBOUNCE_MS = 5;
  6. /**
  7. @brief Asymmetric debouncer
  8. */
  9. class Debouncer {
  10. public:
  11. Debouncer();
  12. void updateTime(millis_t delta);
  13. bool sample(bool value);
  14. private:
  15. millis_t timeout;
  16. };
  17. template<typename T, T millis>
  18. class Timeout {
  19. public:
  20. Timeout() {
  21. timeout = 0;
  22. }
  23. void updateTime(millis_t delta) {
  24. if (timeout > delta) {
  25. timeout -= delta;
  26. } else {
  27. timeout = 0;
  28. }
  29. }
  30. void expire() {
  31. timeout = 0;
  32. }
  33. bool get() const {
  34. return timeout == 0;
  35. }
  36. void reset() {
  37. timeout = millis;
  38. }
  39. private:
  40. uint16_t timeout;
  41. };
  42. #endif