ロータリーエンコーダーのライブラリです。 角速度 、 角度 、 RPMなどがだせます。

Dependents:   scan2 Test_moter electrocoagulador_teclado 17pwmencoder ... more

バージョンがあがりました。 こちらにあります。 https://developer.mbed.org/users/kikoaac/code/QEI2/ ハードの節約、効率化をしました。複数のQEIを使うのであれば、こちらのほうがいいと思います。

QEI(PinName channelA, PinName channelB, PinName index, int pulsesPerRev, Encoding encoding = X2_ENCODING); Aチ ャンネル、Bチャンネル、Zチャンネル、1周のパルス、タイプ

void reset(void); Pulses=0にする。

int getCurrentState(void); ローテリーエンコーダの現在の値をかえす。(00、01、10、11)

void set(int pul , int rev); pulはPulses,revはRevolutionをセット

int getPulses(void); Pulsesを返す

int getRevolutions(void); Z軸があれば基準からの回転周期をかえす

int getAng_rev(); Z軸がなければこちらを使用してください。

double getAngle(); 基準からの角度(0~360)を返す double getSumangle(); 基準からの角度を返す

double getRPM(); double getRPS(); double getRPMS(); double getRPUS(); 回転周期をかえす。

Revision:
0:a24686ca50ab
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QEI.h	Fri Apr 17 06:44:34 2015 +0000
@@ -0,0 +1,76 @@
+
+
+#ifndef QEI_H
+#define QEI_H
+
+
+#include "mbed.h"
+
+
+#define PREV_MASK 0x1 //Mask for the previous state in determining direction
+//of rotation.
+#define CURR_MASK 0x2 //Mask for the current state in determining direction
+//of rotation.
+#define INVALID   0x3 //XORing two states where both bits have changed.
+
+class QEI {
+
+public:
+
+    typedef enum Encoding {
+
+        X2_ENCODING,
+        X4_ENCODING
+
+    } Encoding;
+
+
+    QEI(PinName channelA, PinName channelB, PinName index, int pulsesPerRev, Encoding encoding = X2_ENCODING);
+
+    void reset(void);
+
+    int getCurrentState(void);
+
+
+    void set(int pul , int rev);  
+     
+    int getPulses(void);
+
+    int getRevolutions(void);
+    
+    int getAng_rev();
+    
+    double getAngle();
+    double getSumangle();
+    double getRPM();
+    double getRPS();
+    double getRPMS();
+    double getRPUS();
+    int          pulsesPerRev_;
+private:
+    Timer Mper , Rper ,MSper ,USper; 
+    Ticker Tick;
+    double RPM , RPS ,RPMS , RPUS;
+
+    void encode(void);
+
+ 
+    void index(void);
+
+    Encoding encoding_;
+
+    InterruptIn channelA_;
+    InterruptIn channelB_;
+    InterruptIn index_;
+    int          round_rev;
+
+    int          prevState_;
+    int          currState_;
+    double angle_ , sumangle;
+    int angle_pulses;
+    volatile int pulses_;
+    volatile int revolutions_;
+
+};
+
+#endif