Revision 1:7d24b4076453, committed 2015-04-01
- 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;