PRAWIRA
Diff: EncoderMotor.h
- Revision:
- 0:cd1a027f038d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EncoderMotor.h Mon Sep 16 10:06:23 2019 +0000 @@ -0,0 +1,120 @@ +#ifndef ENCODERMOTOR_H +#define ENCODERMOTOR_H + +/** + * Includes + */ +#include "mbed.h" + +/** + * Defines + */ +#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. + +/** + * Quadrature Encoder Interface. + */ +class EncoderMotor { + +public: + + typedef enum Encoding + { + X2_ENCODING, + X4_ENCODING + } + Encoding; + + /** Membuat interface dari encoder + * + * @param inA DigitalIn, out A dari encoder + * @param inB DigitalIn, out B dari encoder + */ + EncoderMotor(PinName channelA, PinName channelB, float pulsesPerRev, Encoding encoding = X2_ENCODING); + + /** + * Reset encoder. + * + * Menset pulse dan revolusi/putaran menjadi 0 + */ + void reset(void); + + /** + * Membaca pulse yang didapat oleh encoder + * + * @return Nilai pulse yang telah dilalui. + */ + int getPulses(void); + + /** + * Membaca putaran yang didapat oleh encoder + * + * @return Nilai revolusi/putaran yang telah dilalui. + */ + float getRevolutions(void); + + /** + * Membaca pulse yang didapat oleh encoder + * + * @return Nilai pulse yang telah dilalui. + */ + //int readDeltaPulses(void); + + /** + * Membaca putaran yang didapat oleh encoder + * + * @return Nilai revolusi/putaran yang telah dilalui. + */ + //int readDeltaRevolutions(void); + + /** + * Disable encoder interrupt pins + * + * @return Disable interrupt pins + */ + void disableInterrupts(void); + + /** + * Enable encoder interrupt pins + * + * @return Enable interrupt pins + */ + void enableInterrupts(void); + + +private: + + /** + * Menghitung pulse + * + * Digunakan setiap rising/falling edge baik channel A atau B + * Membaca putaran CW atau CCW => mengakibatkan pertambahan/pengurangan pulse + */ + void encode(void); + + /** + * Indeks setiap rising edge untuk menghitung putaran + * Nilai bertambah 1 + */ + //void index(void); + + Encoding encoding_; + + InterruptIn channelA_; + InterruptIn channelB_; + //InterruptIn index_; + + float pulsesPerRev_; + int prevState_; + int currState_; + + volatile int pulses_; + volatile float revolutions_; + +}; + +#endif /* ENCODERMOTOR_H */