2 Phase different signals rotational encoder library 2相位相差型ロータリーエンコーダ用ライブラリ。 絶対値パルス関数。相対値(前回読み出しからの差)パルス出力関数。秋月電子のEC12PLRGBSDVBF-D-25K-24-24C-61で動作確認した。http://akizukidenshi.com/catalog/g/gP-05773/

Dependents:   RotationalEncoder_Hello

example program

Import programRotationalEncoder_Hello

RotationalEncoder library's example program

Revision:
1:57c43aac7007
Child:
2:0102de0ec7a7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RotationalEncoder.h	Sun Oct 23 02:18:28 2016 +0000
@@ -0,0 +1,113 @@
+/**
+ * Rotational encoder Library
+ *
+ * 2 Phase-differnt signals (Signal A,B)
+ *
+ * <example part>
+ *   parts no   : EC12PLGRBSDVBF
+ *   ec site    : http://akizukidenshi.com/catalog/g/gP-05773/
+ *   data sheet : http://akizukidenshi.com/download/ds/topup/EC12PLRGBSDVBF-D-25K-24-24C-61%EF%BC%8F08-6H(SPEC).pdf
+ *
+ * <scematic>
+ *
+ *    rotational     +Vcc  +Vcc
+ *       encoder     |     |
+ *      +--------+   R(*1) R(*1)
+ *      |        |   |     |
+ *      |     A  +---+-----+----- mbed (pXX)
+ *      |        |         |
+ *      |     B  +---------+----- mbed (pXX)
+ *      |   C    |
+ *      +---+----+    *1: mbed inernal pullup (The outside resistance is unnecessary)
+ *          |
+ *          - GND
+ *
+ * <timing chart>
+ *
+ *     interrupt          down(*1)   up(*2)     down
+ *                        !          !          !
+ *     stop point    stop !          !     stop !
+ *                     !  !          !       !  !
+ *              ----------+          +----------+
+ *                     !  |          |       !  |
+ *  Signal A           !  +----------+       !  +----------+
+ *                     !  !          !       !  !
+ *                   +----------+    !     +----------+
+ *                   |    !     |    !     |    !     |
+ *  Signal B  -------+    !     +----------+    !     +---------
+ *                        !          !          !
+ *  detect                !          !          !
+ *          cw →          01    →    10   →     01
+ *
+ *         ccw ←          11    ←    00   ←     11
+ *
+ *   *1:interuupt down side is Provisionally process
+ *   *2:interrupt up side is dicition process
+ *
+ * <example program>
+ *
+ */
+
+
+#ifndef ROTATIONALENCODER_H
+#define ROTATIONALENCODER_H
+
+#include "mbed.h"
+
+/**
+ * rotational encoder interface.
+ */
+
+
+/**
+ *  @class RotationalEncoder
+ *  @brief nothine
+ */
+class RotationalEncoder
+{
+
+public:
+
+    /** Create a RotationalEncoder port, connected to the specified A and B pins
+     *  @param channelA encoder A pin
+     *  @param channelB encoder B pin
+     *  @note  nothing
+     */
+    RotationalEncoder(PinName channelA, PinName channelB);
+
+    /**
+     * Reset the number for absolute and relative.
+     */
+    void reset(void);
+
+    /**
+     * Get the number of absolute pulses recorded by the encoder.
+     *
+     * @return Number of absolute pulses.
+     */
+    int16_t getAbsolutePulses(void);
+
+    /**
+     * Get the number of relative pulses recorded by the encoder.
+     *
+     * @return Number of relative pulses.
+     */
+    int16_t getRelativePulses(void);
+
+
+private:
+
+    void encoderAUp(void);
+    void encoderADwon(void);
+
+    InterruptIn _channelA;
+    InterruptIn _channelB;
+
+    int16_t _channelBLevelOfchannelALow;
+    #define INITAL 0xff
+
+    volatile int16_t _absolutePulse;
+    volatile int16_t _relativePulse;
+};
+
+#endif /* ROTATIONALENCODER_H */