Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
DebouncedIn.cpp
- Committer:
- victorhlvsilva
- Date:
- 2019-05-06
- Revision:
- 0:7e80907da2dc
File content as of revision 0:7e80907da2dc:
#include "DebouncedIn.h"
#include "mbed.h"
/*
* Constructor
*/
DebouncedIn::DebouncedIn(PinName in)
: _in(in) {
// reset all the flags and counters
_samples = 0;
_output = 0;
_output_last = 0;
_rising_flag = 0;
_falling_flag = 0;
_state_counter = 0;
// Attach ticker
_ticker.attach(this, &DebouncedIn::_sample, 0.005);
}
void DebouncedIn::_sample() {
// take a sample
_samples = _samples >> 1; // shift left
if (_in) {
_samples |= 0x80;
}
// examine the sample window, look for steady state
if (_samples == 0x00) {
_output = 0;
}
else if (_samples == 0xFF) {
_output = 1;
}
// Rising edge detection
if ((_output == 1) && (_output_last == 0)) {
_rising_flag++;
_state_counter = 0;
}
// Falling edge detection
else if ((_output == 0) && (_output_last == 1)) {
_falling_flag++;
_state_counter = 0;
}
// steady state
else {
_state_counter++;
}
// update the output
_output_last = _output;
}
// return number of rising edges
int DebouncedIn::rising(void) {
int return_value = _rising_flag;
_rising_flag = 0;
return(return_value);
}
// return number of falling edges
int DebouncedIn::falling(void) {
int return_value = _falling_flag;
_falling_flag = 0;
return(return_value);
}
// return number of ticsk we've bene steady for
int DebouncedIn::steady(void) {
return(_state_counter);
}
// return the debounced status
int DebouncedIn::read(void) {
return(_output);
}
// shorthand for read()
DebouncedIn::operator int() {
return read();
}