ESPectro32 Library
Library for using ESPectro32 board
 All Classes Functions Variables Enumerations Enumerator Pages
ESPectro32_Button.h
1 /*
2  * ESPectro32_Button.h
3  *
4  * Created on: Aug 8, 2017
5  * Author: andri
6  */
7 
8 #ifndef COMPONENTS_ESPECTRO32_SRC_ESPECTRO32_BUTTON_H_
9 #define COMPONENTS_ESPECTRO32_SRC_ESPECTRO32_BUTTON_H_
10 
11 #include "Arduino.h"
12 #include "ESPectro32_Constants.h"
13 #include <functional>
14 #include <Task.h>
15 
16 //#define _GLIBCXX_USE_C99
17 #include <string>
18 
19 #define ESPECTRO32_BUTTON_DEBOUNCE_DURATION_MS 30
20 #define ESPECTRO32_BUTTON_PRESS_DURATION_MS 750
21 #define ESPECTRO32_BUTTON_CLICK_DURATION_MS 250
22 //#define ESPECTRO32_BUTTON_LONG_PRESS_DURATION_MS 800
23 
44 class ESPectro32_Button: public Task {
45 public:
46 
47  enum Button_State {
48  ESPectro32ButtonUnknown = 0,
49  ESPectro32ButtonPressed,
50  ESPectro32ButtonReleased,
51  ESPectro32ButtonSecondPressed,
52  ESPectro32ButtonWaitingForLongPressed,
53  ESPectro32ButtonLongPressed
54  };
55 
56  typedef std::function<void()> ButtonActionCallback;
57 
58  ESPectro32_Button(uint8_t gpio, boolean activeHigh = false);
60 
64  void begin();
65 
66  void start(void *taskData=nullptr);
67  Button_State getState();
68  void run();
69  void runAsync(void *data);
70  void onButtonDown(ButtonActionCallback cb);
71  void onButtonUp(ButtonActionCallback cb);
72  void onPressed(ButtonActionCallback cb);
73  void onLongPressed(ButtonActionCallback cb);
74  void onDoublePressed(ButtonActionCallback cb);
75 
76 // void setGpioNumber(uint8_t g) {
77 // gpioNumber_ = g;
78 // }
79 
80 private:
81 
82  uint8_t gpioNumber_;
83  bool activeHigh_ = false;
84  bool trackLongPressed_ = false;
85  Button_State buttonState_ = ESPectro32ButtonUnknown;
86 
87  unsigned long lastButtonChangedMillis_ = 0, lastButtonPressedMillis_ = 0;
88  unsigned long checkingStartTime_ = 0, checkingEndTime_ = 0;
89  volatile bool interruptTriggered_ = false;
90  volatile bool runAlreadyCalled_ = false;
91 
92  ButtonActionCallback btnDownCallback_;
93  ButtonActionCallback btnUpCallback_;
94  ButtonActionCallback pressedCallback_;
95  ButtonActionCallback longPressedCallback_;
96  ButtonActionCallback doublePressedCallback_;
97 
98  bool isActive();
99  uint8_t pressCount_ = 0;
100 
101  void examine();
102 };
103 
104 #endif /* COMPONENTS_ESPECTRO32_SRC_ESPECTRO32_BUTTON_H_ */
void runAsync(void *data)
Body of the task to execute.
Definition: ESPectro32_Button.cpp:46
void begin()
Must be called as soon as possible to do initialization stuffs.
Definition: ESPectro32_Button.cpp:38
Encapsulate a runnable task.
Definition: Task.h:34
ESPectro32 button.
Definition: ESPectro32_Button.h:44