Lumitronix_Iflex_Pro_Workshop
Library to interact with the iFlexPro
LUMITRONIX_iFlexWorkshop_Button.h
Go to the documentation of this file.
1 #ifndef HEADER_LUMITRONIX_IFLEX_WORKSHOP_BUTTON
2 #define HEADER_LUMITRONIX_IFLEX_WORKSHOP_BUTTON
3 
4 
5 #include <Arduino.h>
6 
7 
12 static constexpr auto LUMITRONIX_IFLEX_WORKSHOP_BUTTON_A_PIN{12};
13 static constexpr auto LUMITRONIX_IFLEX_WORKSHOP_BUTTON_B_PIN{11};
14 static constexpr decltype(::millis()) LUMITRONIX_IFLEX_WORKSHOP_BUTTON_DEBOUNCE{50};
15 
16 
20 };
21 
22 
24 private:
25  uint8_t pin;
28  decltype(::millis()) lastStateChange{0};
29 
30 public:
31  explicit LUMITRONIX_iFlexWorkshop_ActiveLowButton(uint8_t pin) : pin{pin} {
32  }
33 
34  void Begin() {
35  ::pinMode(pin, INPUT_PULLUP);
36  }
37 
38  [[nodiscard]] bool IsPressed() {
39  Update();
41  }
42 
43  [[nodiscard]] bool IsReleased() {
44  Update();
46  }
47 
48 private:
49  void Update() {
50  LUMITRONIX_iFlexWorkshop_ButtonState const currentState = Read();
51  decltype(::millis()) const now = ::millis();
52 
53  if (currentState == lastState) {
54  if ((now - lastStateChange) > LUMITRONIX_IFLEX_WORKSHOP_BUTTON_DEBOUNCE) {
55  stableState = lastState;
56  }
57  return;
58  }
59 
60  lastState = currentState;
61  lastStateChange = now;
62  }
63 
64  [[nodiscard]] LUMITRONIX_iFlexWorkshop_ButtonState Read() {
65  if (LOW == ::digitalRead(pin)) {
67  } else {
69  }
70  }
71 };
72 
73 
75 public:
76  explicit LUMITRONIX_iFlexWorkshop_ButtonA() : LUMITRONIX_iFlexWorkshop_ActiveLowButton{LUMITRONIX_IFLEX_WORKSHOP_BUTTON_A_PIN} {
77  }
78 };
79 
80 
82 public:
83  explicit LUMITRONIX_iFlexWorkshop_ButtonB() : LUMITRONIX_iFlexWorkshop_ActiveLowButton{LUMITRONIX_IFLEX_WORKSHOP_BUTTON_B_PIN} {
84  }
85 };
86 
87 
88 #endif
89 
LUMITRONIX_iFlexWorkshop_ButtonState
Definition: LUMITRONIX_iFlexWorkshop_Button.h:17
Definition: LUMITRONIX_iFlexWorkshop_Button.h:23
bool IsReleased()
Definition: LUMITRONIX_iFlexWorkshop_Button.h:43
void Begin()
Definition: LUMITRONIX_iFlexWorkshop_Button.h:34
LUMITRONIX_iFlexWorkshop_ActiveLowButton(uint8_t pin)
Definition: LUMITRONIX_iFlexWorkshop_Button.h:31
bool IsPressed()
Definition: LUMITRONIX_iFlexWorkshop_Button.h:38
Definition: LUMITRONIX_iFlexWorkshop_Button.h:74
LUMITRONIX_iFlexWorkshop_ButtonA()
Definition: LUMITRONIX_iFlexWorkshop_Button.h:76
Definition: LUMITRONIX_iFlexWorkshop_Button.h:81
LUMITRONIX_iFlexWorkshop_ButtonB()
Definition: LUMITRONIX_iFlexWorkshop_Button.h:83