123

Fork of Encoder by First Last

Files at this revision

API Documentation at this revision

Comitter:
d15321854
Date:
Wed Feb 15 12:32:48 2017 +0000
Parent:
6:18b000b443af
Commit message:
123

Changed in this revision

encoder.cpp Show diff for this revision Revisions of this file
encoder.h Show diff for this revision Revisions of this file
--- a/encoder.cpp	Mon Sep 29 20:47:37 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-
-#include "encoder.h"
-
-
-Encoder::Encoder(PinName int_a, PinName int_b, bool speed) : pin_a(int_a), pin_b(int_b)
-{
-    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;
-    m_speed = 0;
-    zero_speed = false;
-}
- 
-void Encoder::encoderFalling(void)
-{
-    //temporary speed storage, in case higher interrupt level does stuff
-    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++;
-        m_speed = temp_speed;
-    }
-    else
-    {
-        m_position--;    
-        m_speed  = -temp_speed; //negative speed
-    }
-}
-
-void Encoder::encoderRising(void)
-{
-    //temporary speed storage, in case higher interrupt level does stuff
-
-    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--;
-        m_speed = -temp_speed; //negative speed
-    }
-    else
-    {
-        m_position++;    
-        m_speed  = temp_speed; 
-    }
-}
-
-void Encoder::timeouthandler(void)
-{
-    m_speed  = 0;
-    zero_speed = true;
-}
\ No newline at end of file
--- a/encoder.h	Mon Sep 29 20:47:37 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-#ifndef _ENCODER_H_
-#define _ENCODER_H_
-
-#include "mbed.h"
-
-/** Encoder class.
- *  Used to read out incremental position encoder. Decodes position in X2 configuration.
- *
- *  Speed estimation is very crude and computationally intensive. Turned off by default
- *
- * Example:
- * @code
- * #include "mbed.h"
- * #include "Encoder.h"
- *
- *   Encoder motor1(PTD0,PTC9,true);
- *   Serial pc(USBTX,USBRX);
- *   pc.baud(115200);
- *   while(1) {
- *       wait(0.2);
- *       pc.printf("pos: %d, speed %f \r\n",motor1.getPosition(), motor1.getSpeed());
- *   }
- * @endcode
- */
-class Encoder
-{
-    public:
-    /** Create Encoder instance
-    @param int_a Pin to be used as InterruptIn! Be careful, as not all pins on all platforms may be used as InterruptIn.
-    @param int_b second encoder pin, used as DigitalIn. Can be any DigitalIn pin, not necessarily on InterruptIn location
-    @param speed boolean value to determine whether speed calculation is done in interrupt routine. Default false (no speed calculation)
-    */
-
-    Encoder(PinName int_a, PinName int_b, bool speed=false);
-    /** Request position
-    @returns current position in encoder counts
-    */
-    int32_t getPosition(){return m_position;}
-    /** Overwrite position
-    @param pos position to be written
-    */
-    void    setPosition(int32_t pos){m_position = pos;}
-    /** Request speed
-    @returns current speed
-    */
-    float   getSpeed(){return m_speed;}
-    private:
-    void encoderFalling(void);
-    void encoderRising(void);
-    bool m_speed_enabled;
-    Timer EncoderTimer;
-    Timeout EncoderTimeout;
-    InterruptIn pin_a;
-    DigitalIn pin_b;
-    int32_t m_position;
-    float   m_speed;
-    void timeouthandler(void);
-    bool zero_speed;
-};
-
-
-#endif //_ENCODER_H_
\ No newline at end of file