Button class with auto repeat function.

Committer:
vargham
Date:
Tue Feb 14 13:22:07 2017 +0000
Revision:
1:3385a1ea4a7d
Parent:
0:a39041955963
Child:
2:97ef12e06605
Added attach, detach.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vargham 0:a39041955963 1 #ifndef BUTTON_H_INCLUDED
vargham 0:a39041955963 2 #define BUTTON_H_INCLUDED
vargham 0:a39041955963 3
vargham 0:a39041955963 4 #include "mbed.h"
vargham 0:a39041955963 5
vargham 0:a39041955963 6 enum ButtonEvent
vargham 0:a39041955963 7 {
vargham 0:a39041955963 8 BUTTON_DOWN = 0, BUTTON_UP, BUTTON_PRESS, BUTTON_LONG_PRESS
vargham 0:a39041955963 9 };
vargham 0:a39041955963 10
vargham 0:a39041955963 11 class Button
vargham 0:a39041955963 12 {
vargham 0:a39041955963 13 public:
vargham 1:3385a1ea4a7d 14 Button(PinName pinName, PinMode pinMode, int activeState, void(*onButtonEvent)(ButtonEvent event, PinName pinName) = NULL, uint16_t autoRepeatTime = 0, uint16_t longPressTime = 600, uint16_t shortPressTime = 30)
vargham 0:a39041955963 15 : _pinName(pinName)
vargham 0:a39041955963 16 , _in(pinName)
vargham 0:a39041955963 17 , _shortPressTime(shortPressTime)
vargham 0:a39041955963 18 , _longPressTime(longPressTime)
vargham 0:a39041955963 19 , _autoRepeatTime(autoRepeatTime)
vargham 0:a39041955963 20 , _activeState(activeState)
vargham 0:a39041955963 21 , _prevState(0)
vargham 0:a39041955963 22 , _fireUpDown(false)
vargham 0:a39041955963 23 , _onButtonEvent(onButtonEvent)
vargham 0:a39041955963 24 {
vargham 0:a39041955963 25 _in.mode(pinMode);
vargham 0:a39041955963 26 _in.rise(Callback<void()>(this, &Button::isrRise));
vargham 0:a39041955963 27 _in.fall(Callback<void()>(this, &Button::isrFall));
vargham 0:a39041955963 28 };
vargham 1:3385a1ea4a7d 29 inline void setAutoRepeatTime_ms(uint16_t autoRepeatTime)
vargham 0:a39041955963 30 {
vargham 0:a39041955963 31 _autoRepeatTime = autoRepeatTime;
vargham 0:a39041955963 32 };
vargham 1:3385a1ea4a7d 33 inline uint16_t getAutoRepeatTime_ms() const
vargham 0:a39041955963 34 {
vargham 0:a39041955963 35 return _autoRepeatTime;
vargham 0:a39041955963 36 }
vargham 0:a39041955963 37 inline int read()
vargham 0:a39041955963 38 {
vargham 0:a39041955963 39 return _in.read() == _activeState;
vargham 0:a39041955963 40 };
vargham 0:a39041955963 41 operator int()
vargham 0:a39041955963 42 {
vargham 0:a39041955963 43 return read();
vargham 0:a39041955963 44 };
vargham 0:a39041955963 45 void setFireUpDown(bool fire)
vargham 0:a39041955963 46 {
vargham 0:a39041955963 47 _fireUpDown = fire;
vargham 0:a39041955963 48 };
vargham 1:3385a1ea4a7d 49 inline bool isFireUpDown() const
vargham 1:3385a1ea4a7d 50 {
vargham 1:3385a1ea4a7d 51 return _fireUpDown;
vargham 1:3385a1ea4a7d 52 };
vargham 1:3385a1ea4a7d 53 void setShortPressTime_ms(uint16_t time_ms)
vargham 1:3385a1ea4a7d 54 {
vargham 1:3385a1ea4a7d 55 _shortPressTime = time_ms;
vargham 1:3385a1ea4a7d 56 };
vargham 1:3385a1ea4a7d 57 inline uint16_t getShortPressTime_ms() const
vargham 1:3385a1ea4a7d 58 {
vargham 1:3385a1ea4a7d 59 return _shortPressTime;
vargham 1:3385a1ea4a7d 60 };
vargham 1:3385a1ea4a7d 61 void setLongPressTime_ms(uint16_t time_ms)
vargham 1:3385a1ea4a7d 62 {
vargham 1:3385a1ea4a7d 63 _longPressTime = time_ms;
vargham 1:3385a1ea4a7d 64 };
vargham 1:3385a1ea4a7d 65 inline uint16_t getLongPressTime_ms() const
vargham 1:3385a1ea4a7d 66 {
vargham 1:3385a1ea4a7d 67 return _longPressTime;
vargham 1:3385a1ea4a7d 68 };
vargham 1:3385a1ea4a7d 69 void attach(void(*onButtonEvent)(ButtonEvent event, PinName pinName))
vargham 1:3385a1ea4a7d 70 {
vargham 1:3385a1ea4a7d 71 _onButtonEvent = onButtonEvent;
vargham 1:3385a1ea4a7d 72 };
vargham 1:3385a1ea4a7d 73 void detach()
vargham 1:3385a1ea4a7d 74 {
vargham 1:3385a1ea4a7d 75 _onButtonEvent = NULL;
vargham 1:3385a1ea4a7d 76 };
vargham 0:a39041955963 77 private:
vargham 0:a39041955963 78 PinName _pinName;
vargham 0:a39041955963 79 InterruptIn _in;
vargham 0:a39041955963 80 Timer _timer;
vargham 0:a39041955963 81 Ticker _tickerAutoRepeat;
vargham 0:a39041955963 82 Timeout _autoRepeatStarter;
vargham 0:a39041955963 83 uint16_t _shortPressTime;
vargham 0:a39041955963 84 uint16_t _longPressTime;
vargham 1:3385a1ea4a7d 85 uint16_t _autoRepeatTime;
vargham 0:a39041955963 86 int _activeState;
vargham 0:a39041955963 87 int _prevState;
vargham 0:a39041955963 88 bool _fireUpDown;
vargham 0:a39041955963 89 void(*_onButtonEvent)(ButtonEvent event, PinName pinName);
vargham 0:a39041955963 90 void isrFall(void);
vargham 0:a39041955963 91 void isrRise(void);
vargham 0:a39041955963 92 void onPress(void);
vargham 0:a39041955963 93 void onRelease(void);
vargham 0:a39041955963 94 void autoRepeat(void);
vargham 0:a39041955963 95 void startAutoRepeat(void);
vargham 0:a39041955963 96 };
vargham 0:a39041955963 97
vargham 0:a39041955963 98 #endif /* BUTTON_H_INCLUDED */