Button class with auto repeat function.
Button.h@5:faff91d60ae3, 2017-07-14 (annotated)
- Committer:
- vargham
- Date:
- Fri Jul 14 18:38:31 2017 +0000
- Revision:
- 5:faff91d60ae3
- Parent:
- 4:d54859273629
Auto enable interrupt.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
vargham | 3:03aea89f2a5c | 1 | /** |
vargham | 3:03aea89f2a5c | 2 | * @file Button.h |
vargham | 3:03aea89f2a5c | 3 | * @brief Button library |
vargham | 3:03aea89f2a5c | 4 | * @author Mark Peter Vargha, vmp@varghamarkpeter.hu |
vargham | 3:03aea89f2a5c | 5 | * |
vargham | 3:03aea89f2a5c | 6 | * Copyright (c) 2017 |
vargham | 3:03aea89f2a5c | 7 | * |
vargham | 3:03aea89f2a5c | 8 | * Licensed under the Apache License, Version 2.0 (the "License"); |
vargham | 3:03aea89f2a5c | 9 | * you may not use this file except in compliance with the License. |
vargham | 3:03aea89f2a5c | 10 | * You may obtain a copy of the License at |
vargham | 3:03aea89f2a5c | 11 | * |
vargham | 3:03aea89f2a5c | 12 | * http://www.apache.org/licenses/LICENSE-2.0 |
vargham | 3:03aea89f2a5c | 13 | * |
vargham | 3:03aea89f2a5c | 14 | * Unless required by applicable law or agreed to in writing, software |
vargham | 3:03aea89f2a5c | 15 | * distributed under the License is distributed on an "AS IS" BASIS, |
vargham | 3:03aea89f2a5c | 16 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
vargham | 3:03aea89f2a5c | 17 | * See the License for the specific language governing permissions and |
vargham | 3:03aea89f2a5c | 18 | * limitations under the License. |
vargham | 3:03aea89f2a5c | 19 | */ |
vargham | 3:03aea89f2a5c | 20 | |
vargham | 0:a39041955963 | 21 | #ifndef BUTTON_H_INCLUDED |
vargham | 0:a39041955963 | 22 | #define BUTTON_H_INCLUDED |
vargham | 0:a39041955963 | 23 | |
vargham | 0:a39041955963 | 24 | #include "mbed.h" |
vargham | 0:a39041955963 | 25 | |
vargham | 0:a39041955963 | 26 | enum ButtonEvent |
vargham | 0:a39041955963 | 27 | { |
vargham | 2:97ef12e06605 | 28 | BUTTON_UNKNOWN = 0, BUTTON_DOWN, BUTTON_UP, BUTTON_PRESS, BUTTON_LONG_PRESS |
vargham | 0:a39041955963 | 29 | }; |
vargham | 0:a39041955963 | 30 | |
vargham | 0:a39041955963 | 31 | class Button |
vargham | 0:a39041955963 | 32 | { |
vargham | 0:a39041955963 | 33 | public: |
vargham | 3:03aea89f2a5c | 34 | Button(PinName pinName, PinMode pinMode, int activeState, Callback<void(ButtonEvent, PinName)> onButtonEvent = 0, uint16_t autoRepeatTime = 0, uint16_t longPressTime = 600, uint16_t shortPressTime = 30) |
vargham | 0:a39041955963 | 35 | : _pinName(pinName) |
vargham | 0:a39041955963 | 36 | , _in(pinName) |
vargham | 0:a39041955963 | 37 | , _shortPressTime(shortPressTime) |
vargham | 0:a39041955963 | 38 | , _longPressTime(longPressTime) |
vargham | 0:a39041955963 | 39 | , _autoRepeatTime(autoRepeatTime) |
vargham | 0:a39041955963 | 40 | , _activeState(activeState) |
vargham | 0:a39041955963 | 41 | , _prevState(0) |
vargham | 0:a39041955963 | 42 | , _fireUpDown(false) |
vargham | 0:a39041955963 | 43 | , _onButtonEvent(onButtonEvent) |
vargham | 0:a39041955963 | 44 | { |
vargham | 0:a39041955963 | 45 | _in.mode(pinMode); |
vargham | 5:faff91d60ae3 | 46 | startInterrupt(); |
vargham | 0:a39041955963 | 47 | }; |
vargham | 4:d54859273629 | 48 | void startInterrupt(); |
vargham | 4:d54859273629 | 49 | void stopInterrupt(); |
vargham | 1:3385a1ea4a7d | 50 | inline void setAutoRepeatTime_ms(uint16_t autoRepeatTime) |
vargham | 0:a39041955963 | 51 | { |
vargham | 0:a39041955963 | 52 | _autoRepeatTime = autoRepeatTime; |
vargham | 0:a39041955963 | 53 | }; |
vargham | 1:3385a1ea4a7d | 54 | inline uint16_t getAutoRepeatTime_ms() const |
vargham | 0:a39041955963 | 55 | { |
vargham | 0:a39041955963 | 56 | return _autoRepeatTime; |
vargham | 0:a39041955963 | 57 | } |
vargham | 0:a39041955963 | 58 | inline int read() |
vargham | 0:a39041955963 | 59 | { |
vargham | 0:a39041955963 | 60 | return _in.read() == _activeState; |
vargham | 0:a39041955963 | 61 | }; |
vargham | 0:a39041955963 | 62 | operator int() |
vargham | 0:a39041955963 | 63 | { |
vargham | 0:a39041955963 | 64 | return read(); |
vargham | 0:a39041955963 | 65 | }; |
vargham | 0:a39041955963 | 66 | void setFireUpDown(bool fire) |
vargham | 0:a39041955963 | 67 | { |
vargham | 0:a39041955963 | 68 | _fireUpDown = fire; |
vargham | 0:a39041955963 | 69 | }; |
vargham | 1:3385a1ea4a7d | 70 | inline bool isFireUpDown() const |
vargham | 1:3385a1ea4a7d | 71 | { |
vargham | 1:3385a1ea4a7d | 72 | return _fireUpDown; |
vargham | 1:3385a1ea4a7d | 73 | }; |
vargham | 1:3385a1ea4a7d | 74 | void setShortPressTime_ms(uint16_t time_ms) |
vargham | 1:3385a1ea4a7d | 75 | { |
vargham | 1:3385a1ea4a7d | 76 | _shortPressTime = time_ms; |
vargham | 1:3385a1ea4a7d | 77 | }; |
vargham | 1:3385a1ea4a7d | 78 | inline uint16_t getShortPressTime_ms() const |
vargham | 1:3385a1ea4a7d | 79 | { |
vargham | 1:3385a1ea4a7d | 80 | return _shortPressTime; |
vargham | 1:3385a1ea4a7d | 81 | }; |
vargham | 1:3385a1ea4a7d | 82 | void setLongPressTime_ms(uint16_t time_ms) |
vargham | 1:3385a1ea4a7d | 83 | { |
vargham | 1:3385a1ea4a7d | 84 | _longPressTime = time_ms; |
vargham | 1:3385a1ea4a7d | 85 | }; |
vargham | 1:3385a1ea4a7d | 86 | inline uint16_t getLongPressTime_ms() const |
vargham | 1:3385a1ea4a7d | 87 | { |
vargham | 1:3385a1ea4a7d | 88 | return _longPressTime; |
vargham | 1:3385a1ea4a7d | 89 | }; |
vargham | 3:03aea89f2a5c | 90 | void attach(Callback<void(ButtonEvent, PinName)> onButtonEvent) |
vargham | 1:3385a1ea4a7d | 91 | { |
vargham | 1:3385a1ea4a7d | 92 | _onButtonEvent = onButtonEvent; |
vargham | 1:3385a1ea4a7d | 93 | }; |
vargham | 1:3385a1ea4a7d | 94 | void detach() |
vargham | 1:3385a1ea4a7d | 95 | { |
vargham | 3:03aea89f2a5c | 96 | _onButtonEvent = 0; |
vargham | 1:3385a1ea4a7d | 97 | }; |
vargham | 0:a39041955963 | 98 | private: |
vargham | 0:a39041955963 | 99 | PinName _pinName; |
vargham | 0:a39041955963 | 100 | InterruptIn _in; |
vargham | 0:a39041955963 | 101 | Timer _timer; |
vargham | 0:a39041955963 | 102 | Ticker _tickerAutoRepeat; |
vargham | 0:a39041955963 | 103 | Timeout _autoRepeatStarter; |
vargham | 0:a39041955963 | 104 | uint16_t _shortPressTime; |
vargham | 0:a39041955963 | 105 | uint16_t _longPressTime; |
vargham | 1:3385a1ea4a7d | 106 | uint16_t _autoRepeatTime; |
vargham | 0:a39041955963 | 107 | int _activeState; |
vargham | 0:a39041955963 | 108 | int _prevState; |
vargham | 0:a39041955963 | 109 | bool _fireUpDown; |
vargham | 3:03aea89f2a5c | 110 | Callback<void(ButtonEvent, PinName)> _onButtonEvent; |
vargham | 0:a39041955963 | 111 | void isrFall(void); |
vargham | 0:a39041955963 | 112 | void isrRise(void); |
vargham | 0:a39041955963 | 113 | void onPress(void); |
vargham | 0:a39041955963 | 114 | void onRelease(void); |
vargham | 0:a39041955963 | 115 | void autoRepeat(void); |
vargham | 0:a39041955963 | 116 | void startAutoRepeat(void); |
vargham | 0:a39041955963 | 117 | }; |
vargham | 0:a39041955963 | 118 | |
vargham | 0:a39041955963 | 119 | #endif /* BUTTON_H_INCLUDED */ |