Final Commit

Committer:
jbeason3
Date:
Fri Oct 04 21:27:24 2019 +0000
Revision:
0:81e1a090126c
Final Commit

Who changed what in which revision?

UserRevisionLine numberNew 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 }