Debouncing library (not mine)

Dependents:   ElecPneuShifter_4 tarea1 tarea_miercoles Rampa ... more

Files at this revision

API Documentation at this revision

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
--- /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
--- /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