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

Revision:
2:0998a8fd7727
Parent:
0:c90b36abcbf8
Child:
4:69be34f39c9f
--- a/encoder.cpp	Tue Oct 01 21:47:15 2013 +0000
+++ b/encoder.cpp	Mon Nov 04 09:56:06 2013 +0000
@@ -1,9 +1,13 @@
 
 #include "encoder.h"
 
-Encoder::Encoder(PinName int_a, PinName int_b) : pin_a(int_a), pin_b(int_b)
+Encoder::Encoder(PinName pos_a, PinName pos_b) : pin_a(pos_a), pin_b(pos_b)
 {
+    DigitalOut rled(LED_RED);
+    rled = 0;
     EncoderTimer.start();
+    pin_a.mode(PullUp);
+    pin_b.mode(PullUp);
     pin_a.fall(this,&Encoder::encoderFalling);
     pin_a.rise(this,&Encoder::encoderRising);
     m_position = 0;
@@ -15,15 +19,15 @@
 {
     //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);
+    //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;
+    //if(zero_speed)
+    //    temp_speed  = 0;
+    //else
+    //    temp_speed = 1000000./motortime_now;
+    //zero_speed = false;
     if(pin_b)
     {
         m_position++;
@@ -40,15 +44,15 @@
 {
     //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);
+    //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;
+    //if(zero_speed)
+    //    temp_speed  = 0;
+    //else
+    //    temp_speed = 1000000./motortime_now;
+    //zero_speed = false;
     if(pin_b)
     {
         m_position--;