Library to read out speed and position from a quadrature encoder. This library uses X2 decoding.
Dependents: BMT-K9_encoder BMT-K9-Regelaar K9motoraansturing_copy EMGverwerking ... more
Diff: encoder.cpp
- Revision:
- 3:dcb7bdc73882
- Parent:
- 0:c90b36abcbf8
- Child:
- 4:69be34f39c9f
--- a/encoder.cpp Tue Oct 01 21:47:15 2013 +0000 +++ b/encoder.cpp Mon Sep 29 15:45:09 2014 +0000 @@ -1,9 +1,11 @@ #include "encoder.h" -Encoder::Encoder(PinName int_a, PinName int_b) : pin_a(int_a), pin_b(int_b) +Encoder::Encoder(PinName int_a, PinName int_b, bool speed=false) : pin_a(int_a), pin_b(int_b) { - EncoderTimer.start(); + m_speed_enabled = speed; + if(m_speed_enabled) + EncoderTimer.start(); pin_a.fall(this,&Encoder::encoderFalling); pin_a.rise(this,&Encoder::encoderRising); m_position = 0; @@ -14,16 +16,20 @@ void Encoder::encoderFalling(void) { //temporary speed storage, in case higher interrupt level does stuff - float temp_speed; - int motortime_now = EncoderTimer.read_us(); - EncoderTimer.reset(); - EncoderTimeout.attach(this,&Encoder::timeouthandler,0.1); - /*calculate as ticks per second*/ - if(zero_speed) - temp_speed = 0; - else - temp_speed = 1000000./motortime_now; - zero_speed = false; + float temp_speed=0; + int motortime_now + if(m_speed_enabled) + { + motortime_now = EncoderTimer.read_us(); + EncoderTimer.reset(); + EncoderTimeout.attach(this,&Encoder::timeouthandler,0.1); + /*calculate as ticks per second*/ + if(zero_speed) + temp_speed = 0; + else + temp_speed = 1000000./motortime_now; + zero_speed = false; + } if(pin_b) { m_position++; @@ -39,16 +45,20 @@ void Encoder::encoderRising(void) { //temporary speed storage, in case higher interrupt level does stuff - float temp_speed; - int motortime_now = EncoderTimer.read_us(); - EncoderTimer.reset(); - EncoderTimeout.attach(this,&Encoder::encoderFalling,0.1); - /*calculate as ticks per second*/ - if(zero_speed) - temp_speed = 0; - else - temp_speed = 1000000./motortime_now; - zero_speed = false; + float temp_speed=0; + int motortime_now; + if(m_speed_enabled) + { + EncoderTimer.reset(); + EncoderTimeout.attach(this,&Encoder::encoderFalling,0.1); + /*calculate as ticks per second*/ + if(zero_speed) + temp_speed = 0; + else + temp_speed = 1000000./motortime_now; + zero_speed = false; + } + if(pin_b) { m_position--;