OITRP_2020 / QEI

Files at this revision

API Documentation at this revision

Comitter:
masamasa818
Date:
Wed Feb 26 03:06:04 2020 +0000
Parent:
0:a24686ca50ab
Commit message:
test

Changed in this revision

QEI.cpp Show annotated file Show diff for this revision Revisions of this file
QEI.h Show annotated file Show diff for this revision Revisions of this file
--- a/QEI.cpp	Fri Apr 17 06:44:34 2015 +0000
+++ b/QEI.cpp	Wed Feb 26 03:06:04 2020 +0000
@@ -1,182 +1,182 @@
-#include "QEI.h"
-
-QEI::QEI(PinName channelA,
-         PinName channelB,
-         PinName index,
-         int pulsesPerRev,
-         Encoding encoding
-         ) : channelA_(channelA), channelB_(channelB),
-        index_(index) {
-
-    pulses_       = 0;
-    revolutions_  = 0;
-    pulsesPerRev_ = pulsesPerRev;
-    encoding_     = encoding;
-    
-    //Workout what the current state is.
-    int chanA = channelA_.read();
-    int chanB = channelB_.read();
-
-    //2-bit state.
-    currState_ = (chanA << 1) | (chanB);
-    prevState_ = currState_;
-
-    channelA_.rise(this, &QEI::encode);
-    channelA_.fall(this, &QEI::encode);
-
-
-    if (encoding == X4_ENCODING) {
-        channelB_.rise(this, &QEI::encode);
-        channelB_.fall(this, &QEI::encode);
-    }
-    if (index !=  NC) {
-        index_.rise(this, &QEI::index);
-    }
-
-}
-
-void QEI::reset(void) {
-
-    pulses_      = 0;
-    revolutions_ = 0;
-    round_rev = 0;
-    sumangle = angle_ =0;
-}
-void QEI::set(int pul , int rev) {
-
-    pulses_      = pul;
-    revolutions_ = rev;
-
-}
-int QEI::getCurrentState(void) {
-
-    return currState_;
-
-}
-
-int QEI::getPulses(void) {
-
-    return pulses_;
-
-}
-
-int QEI::getRevolutions(void) {
-
-    return revolutions_;
-
-}
-double QEI::getAngle()
-{
-    return angle_;
-}
-int QEI::getAng_rev()
-{
-    return round_rev;
-}
-double QEI::getSumangle()
-{
-    return sumangle;
-}
-
-double QEI::getRPM()
-{
-    static double prev_angle;
-        Mper.stop();
-        
-        RPM = (sumangle - prev_angle) / Mper.read() * 60.0 / 360;
-        Mper.reset();
-        Mper.start();
-        prev_angle = sumangle;        
-    return RPM;
-}
-double QEI::getRPS()
-{
-    static double prev_angle;
-        Rper.stop();
-        
-        RPS = (sumangle - prev_angle) / Rper.read() / 360;
-        Rper.reset();
-        Rper.start();
-        prev_angle = sumangle;  
-    return RPS;
-}
-double QEI::getRPMS()
-{    static double prev_angle;
-        MSper.stop();
-        
-        RPMS = (sumangle - prev_angle) / (double)MSper.read_ms() / 360;
-        MSper.reset();
-        MSper.start();
-        prev_angle = sumangle;  
-    return RPMS;
-}
-double QEI::getRPUS()
-{    static double prev_angle;
-        USper.stop();
-        
-        RPUS = (sumangle - prev_angle) / (double)USper.read_us() / 360;
-        USper.reset();
-        USper.start();
-        prev_angle = sumangle;  
-    return RPUS;
-}
-void QEI::encode(void) {
-
-    int change = 0;
-    int chanA  = channelA_.read();
-    int chanB  = channelB_.read();
-
-    currState_ = (chanA << 1) | (chanB);
-    
-    if (encoding_ == X2_ENCODING) {
-
-        if ((prevState_ == 0x3 && currState_ == 0x0) ||
-                (prevState_ == 0x0 && currState_ == 0x3)) {
-
-            pulses_++;
-            angle_pulses++;
-
-        }
-        else if ((prevState_ == 0x2 && currState_ == 0x1) ||
-                 (prevState_ == 0x1 && currState_ == 0x2)) {
-
-            pulses_--;
-            angle_pulses--;
-
-        }
-
-    } else if (encoding_ == X4_ENCODING) {
-
-        if (((currState_ ^ prevState_) != INVALID) && (currState_ != prevState_)) {
-            change = (prevState_ & PREV_MASK) ^ ((currState_ & CURR_MASK) >> 1);
-
-            if (change == 0) {
-                change = -1;
-            }
-
-            pulses_ -= change;
-            angle_pulses -= change;
-        }
-
-    }
-    angle_ = angle_pulses*360/((double)pulsesPerRev_*4);
-    sumangle = pulses_*360/((double)pulsesPerRev_*4);
-    if(angle_>=360)
-    {
-        angle_pulses = angle_ = 0;
-        round_rev++;
-    }
-    else if(angle_<=-360)
-    {
-        angle_pulses = angle_ = 0;
-        round_rev--;
-    }
-    prevState_ = currState_;
-}
-
-void QEI::index(void) {
-
-    revolutions_++;
-
-}
+#include "QEI.h"
+
+QEI::QEI(PinName channelA,
+         PinName channelB,
+         PinName index,
+         int pulsesPerRev,
+         Encoding encoding
+         ) : channelA_(channelA), channelB_(channelB),
+        index_(index) {
+
+    pulses_       = 0;
+    revolutions_  = 0;
+    pulsesPerRev_ = pulsesPerRev;
+    encoding_     = encoding;
+    
+    //Workout what the current state is.
+    int chanA = channelA_.read();
+    int chanB = channelB_.read();
+
+    //2-bit state.
+    currState_ = (chanA << 1) | (chanB);
+    prevState_ = currState_;
+
+    channelA_.rise(this, &QEI::encode);
+    channelA_.fall(this, &QEI::encode);
+
+
+    if (encoding == X4_ENCODING) {
+        channelB_.rise(this, &QEI::encode);
+        channelB_.fall(this, &QEI::encode);
+    }
+    if (index !=  NC) {
+        index_.rise(this, &QEI::index);
+    }
+
+}
+
+void QEI::reset(void) {
+
+    pulses_      = 0;
+    revolutions_ = 0;
+    round_rev = 0;
+    sumangle = angle_ =0;
+}
+void QEI::set(int pul , int rev) {
+
+    pulses_      = pul;
+    revolutions_ = rev;
+
+}
+int QEI::getCurrentState(void) {
+
+    return currState_;
+
+}
+
+int QEI::getPulses(void) {
+
+    return pulses_;
+
+}
+
+int QEI::getRevolutions(void) {
+
+    return revolutions_;
+
+}
+double QEI::getAngle()
+{
+    return angle_;
+}
+int QEI::getAng_rev()
+{
+    return round_rev;
+}
+float QEI::getSumangle()
+{
+    return sumangle;
+}
 
+float QEI::getRPM()
+{
+    static float prev_angle;
+        Mper.stop();
+        
+        RPM = (sumangle - prev_angle) / (float)Mper.read() * 60.0 / 360.0;
+        Mper.reset();
+        Mper.start();
+        prev_angle = sumangle;        
+    return RPM;
+}
+double QEI::getRPS()
+{
+    static double prev_angle;
+        Rper.stop();
+        
+        RPS = (sumangle - prev_angle) / Rper.read() / 360.0;
+        Rper.reset();
+        Rper.start();
+        prev_angle = sumangle;  
+    return RPS;
+}
+double QEI::getRPMS()
+{    static double prev_angle;
+        MSper.stop();
+        
+        RPMS = (sumangle - prev_angle) / (double)MSper.read_ms() / 360.0;
+        MSper.reset();
+        MSper.start();
+        prev_angle = sumangle;  
+    return RPMS;
+}
+double QEI::getRPUS()
+{    static double prev_angle;
+        USper.stop();
+        
+        RPUS = (sumangle - prev_angle) / (double)USper.read_us() / 360.0;
+        USper.reset();
+        USper.start();
+        prev_angle = sumangle;  
+    return RPUS;
+}
+void QEI::encode(void) {
+
+    int change = 0;
+    int chanA  = channelA_.read();
+    int chanB  = channelB_.read();
+
+    currState_ = (chanA << 1) | (chanB);
+    
+    if (encoding_ == X2_ENCODING) {
+
+        if ((prevState_ == 0x3 && currState_ == 0x0) ||
+                (prevState_ == 0x0 && currState_ == 0x3)) {
+
+            pulses_++;
+            angle_pulses++;
+
+        }
+        else if ((prevState_ == 0x2 && currState_ == 0x1) ||
+                 (prevState_ == 0x1 && currState_ == 0x2)) {
+
+            pulses_--;
+            angle_pulses--;
+
+        }
+
+    } else if (encoding_ == X4_ENCODING) {
+
+        if (((currState_ ^ prevState_) != INVALID) && (currState_ != prevState_)) {
+            change = (prevState_ & PREV_MASK) ^ ((currState_ & CURR_MASK) >> 1);
+
+            if (change == 0) {
+                change = -1;
+            }
+
+            pulses_ -= change;
+            angle_pulses -= change;
+        }
+
+    }
+    angle_ = angle_pulses*360/((double)pulsesPerRev_*4);
+    sumangle = pulses_*360/((double)pulsesPerRev_*4);
+    if(angle_>=360)
+    {
+        angle_pulses = angle_ = 0;
+        round_rev++;
+    }
+    else if(angle_<=-360)
+    {
+        angle_pulses = angle_ = 0;
+        round_rev--;
+    }
+    prevState_ = currState_;
+}
+
+void QEI::index(void) {
+
+    revolutions_++;
+
+}
+
--- a/QEI.h	Fri Apr 17 06:44:34 2015 +0000
+++ b/QEI.h	Wed Feb 26 03:06:04 2020 +0000
@@ -41,8 +41,8 @@
     int getAng_rev();
     
     double getAngle();
-    double getSumangle();
-    double getRPM();
+    float getSumangle();
+    float getRPM();
     double getRPS();
     double getRPMS();
     double getRPUS();
@@ -50,7 +50,7 @@
 private:
     Timer Mper , Rper ,MSper ,USper; 
     Ticker Tick;
-    double RPM , RPS ,RPMS , RPUS;
+    float RPM , RPS ,RPMS , RPUS;
 
     void encode(void);
 
@@ -66,7 +66,7 @@
 
     int          prevState_;
     int          currState_;
-    double angle_ , sumangle;
+    float angle_ , sumangle;
     int angle_pulses;
     volatile int pulses_;
     volatile int revolutions_;