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.
Dependents: ElecPneuShifter_4 tarea1 tarea_miercoles Rampa ... more
Revision 0:8992c13bbb9b, committed 2010-11-28
- Comitter:
- WarwickRacing
- Date:
- Sun Nov 28 14:19:52 2010 +0000
- Commit message:
Changed in this revision
| DebouncedIn.cpp | Show annotated file Show diff for this revision Revisions of this file |
| DebouncedIn.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 8992c13bbb9b DebouncedIn.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/DebouncedIn.cpp Sun Nov 28 14:19:52 2010 +0000
@@ -0,0 +1,91 @@
+#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();
+ }
\ No newline at end of file
diff -r 000000000000 -r 8992c13bbb9b DebouncedIn.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/DebouncedIn.h Sun Nov 28 14:19:52 2010 +0000
@@ -0,0 +1,29 @@
+#include "mbed.h"
+
+ class DebouncedIn {
+ public:
+ DebouncedIn(PinName in);
+
+ int read (void);
+ operator int();
+
+ int rising(void);
+ int falling(void);
+ int steady(void);
+
+ private :
+ // objects
+ DigitalIn _in;
+ Ticker _ticker;
+
+ // function to take a sample, and update flags
+ void _sample(void);
+
+ // counters and flags
+ int _samples;
+ int _output;
+ int _output_last;
+ int _rising_flag;
+ int _falling_flag;
+ int _state_counter;
+ };
\ No newline at end of file