Files at this revision

API Documentation at this revision

Comitter:
michaelruck
Date:
Wed Apr 01 05:43:10 2015 +0000
Parent:
0:1330a261101d
Commit message:
Added Timeout to prevent isr chattering

Changed in this revision

EncoderSwitch.cpp Show annotated file Show diff for this revision Revisions of this file
EncoderSwitch.h Show annotated file Show diff for this revision Revisions of this file
diff -r 1330a261101d -r 7d24b4076453 EncoderSwitch.cpp
--- a/EncoderSwitch.cpp	Sun Mar 29 08:40:31 2015 +0000
+++ b/EncoderSwitch.cpp	Wed Apr 01 05:43:10 2015 +0000
@@ -15,7 +15,7 @@
 
     _pinB.fall(this, &EncoderSwitch::isrb);
     _pinB.rise(this, &EncoderSwitch::isrb);
-
+    
     _limit_down=0;
     _limit_up=9;
     _increment=0;
@@ -23,8 +23,17 @@
 
 EncoderSwitch::~EncoderSwitch() {/*none*/}
 
+void EncoderSwitch::_enable_isr()
+{
+    _pinA.enable_irq();
+    _pinB.enable_irq();
+}
+
 void EncoderSwitch::isra()
 {
+    _pinA.disable_irq();
+    _pinB.disable_irq();
+    _timeout.attach_us(this, &EncoderSwitch::_enable_isr, 500);
     int8_t state_a = _pinA.read();
     int8_t state_b = _pinB.read();
     if(state_a != state_b) _increment = 1;
@@ -36,6 +45,9 @@
 
 void EncoderSwitch::isrb()
 {
+    _pinA.disable_irq();
+    _pinB.disable_irq();
+    _timeout.attach_us(this, &EncoderSwitch::_enable_isr, 500);
     int8_t state_a = _pinA.read();
     int8_t state_b = _pinB.read();
     if(state_a != state_b) _increment = -1;
diff -r 1330a261101d -r 7d24b4076453 EncoderSwitch.h
--- a/EncoderSwitch.h	Sun Mar 29 08:40:31 2015 +0000
+++ b/EncoderSwitch.h	Wed Apr 01 05:43:10 2015 +0000
@@ -19,6 +19,9 @@
     InterruptIn _pinA;
     InterruptIn _pinB;
     
+    Timeout _timeout;
+    void _enable_isr();
+    
     int16_t _limit_down;
     int16_t _limit_up;
     volatile int8_t _increment;