Motor is operated by keyboard commands, encoder reads out position but not yet speed

Dependencies:   HIDScope

Dependents:   Project_motor Project_motor Motor_poscontrol Conceptcontroller_v_1_0

Fork of Encoder by Biorobotics Project

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