Final Commit
DebounceIn.cpp@0:81e1a090126c, 2019-10-04 (annotated)
- Committer:
- jbeason3
- Date:
- Fri Oct 04 21:27:24 2019 +0000
- Revision:
- 0:81e1a090126c
Final Commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jbeason3 | 0:81e1a090126c | 1 | /* A digital input with switch debouncing |
jbeason3 | 0:81e1a090126c | 2 | * Copyright 2015, Takuo Watanabe |
jbeason3 | 0:81e1a090126c | 3 | * |
jbeason3 | 0:81e1a090126c | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
jbeason3 | 0:81e1a090126c | 5 | * you may not use this file except in compliance with the License. |
jbeason3 | 0:81e1a090126c | 6 | * You may obtain a copy of the License at |
jbeason3 | 0:81e1a090126c | 7 | * |
jbeason3 | 0:81e1a090126c | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
jbeason3 | 0:81e1a090126c | 9 | * |
jbeason3 | 0:81e1a090126c | 10 | * Unless required by applicable law or agreed to in writing, software |
jbeason3 | 0:81e1a090126c | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
jbeason3 | 0:81e1a090126c | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
jbeason3 | 0:81e1a090126c | 13 | * See the License for the specific language governing permissions and |
jbeason3 | 0:81e1a090126c | 14 | * limitations under the License. |
jbeason3 | 0:81e1a090126c | 15 | */ |
jbeason3 | 0:81e1a090126c | 16 | |
jbeason3 | 0:81e1a090126c | 17 | #include "DebounceIn.h" |
jbeason3 | 0:81e1a090126c | 18 | |
jbeason3 | 0:81e1a090126c | 19 | DebounceIn::DebounceIn(PinName pin, timestamp_t us) : DigitalIn(pin) { |
jbeason3 | 0:81e1a090126c | 20 | _prev = _curr = 0; |
jbeason3 | 0:81e1a090126c | 21 | _rise = _fall = NULL; |
jbeason3 | 0:81e1a090126c | 22 | set_sample_rate(us); |
jbeason3 | 0:81e1a090126c | 23 | } |
jbeason3 | 0:81e1a090126c | 24 | |
jbeason3 | 0:81e1a090126c | 25 | DebounceIn::~DebounceIn() { |
jbeason3 | 0:81e1a090126c | 26 | _ticker.detach(); |
jbeason3 | 0:81e1a090126c | 27 | } |
jbeason3 | 0:81e1a090126c | 28 | |
jbeason3 | 0:81e1a090126c | 29 | int DebounceIn::read() { |
jbeason3 | 0:81e1a090126c | 30 | return _curr; |
jbeason3 | 0:81e1a090126c | 31 | } |
jbeason3 | 0:81e1a090126c | 32 | |
jbeason3 | 0:81e1a090126c | 33 | #ifdef MBED_OPERATORS |
jbeason3 | 0:81e1a090126c | 34 | /** An operator shorthand for read() |
jbeason3 | 0:81e1a090126c | 35 | */ |
jbeason3 | 0:81e1a090126c | 36 | DebounceIn::operator int() { |
jbeason3 | 0:81e1a090126c | 37 | return read(); |
jbeason3 | 0:81e1a090126c | 38 | } |
jbeason3 | 0:81e1a090126c | 39 | #endif |
jbeason3 | 0:81e1a090126c | 40 | |
jbeason3 | 0:81e1a090126c | 41 | void DebounceIn::set_sample_rate(timestamp_t us) { |
jbeason3 | 0:81e1a090126c | 42 | _ticker.detach(); |
jbeason3 | 0:81e1a090126c | 43 | _ticker.attach_us(this, &DebounceIn::sample, us); |
jbeason3 | 0:81e1a090126c | 44 | } |
jbeason3 | 0:81e1a090126c | 45 | |
jbeason3 | 0:81e1a090126c | 46 | void DebounceIn::rise(void (*fptr)(void)) { |
jbeason3 | 0:81e1a090126c | 47 | _rise.attach(fptr); |
jbeason3 | 0:81e1a090126c | 48 | } |
jbeason3 | 0:81e1a090126c | 49 | |
jbeason3 | 0:81e1a090126c | 50 | void DebounceIn::fall(void (*fptr)(void)) { |
jbeason3 | 0:81e1a090126c | 51 | _fall.attach(fptr); |
jbeason3 | 0:81e1a090126c | 52 | } |
jbeason3 | 0:81e1a090126c | 53 | |
jbeason3 | 0:81e1a090126c | 54 | void DebounceIn::sample() { |
jbeason3 | 0:81e1a090126c | 55 | int now = DigitalIn::read(); |
jbeason3 | 0:81e1a090126c | 56 | if (now == _prev) { |
jbeason3 | 0:81e1a090126c | 57 | if (!_curr && now) _rise.call(); |
jbeason3 | 0:81e1a090126c | 58 | if (_curr && !now) _fall.call(); |
jbeason3 | 0:81e1a090126c | 59 | _curr = now; |
jbeason3 | 0:81e1a090126c | 60 | } |
jbeason3 | 0:81e1a090126c | 61 | _prev = now; |
jbeason3 | 0:81e1a090126c | 62 | } |