update, sampling timenya kecilin
rotaryEncoder.h
- Committer:
- sarlilouis
- Date:
- 2017-10-25
- Revision:
- 0:a074f8e4001e
File content as of revision 0:a074f8e4001e:
#ifndef ROTARYENCODER_H #define ROTARYENCODER_H ////////////////////////////////////////// // Library ///////////////////////////////////////// #include "mbed.h" //////////////////////////////////////////////////////////////////////////////// // Define Konstanta //////////////////////////////////////////////////////////////////////////////// #define PREV_MASK 0x1 //Konstanta untuk mengetahui previous direction #define CURR_MASK 0x2 //Konstanta untuk mengetahui current direction #define INVALID 0x3 //XORing two states where both bits have changed. /******************************** * Quadrature Encoder Interface * ********************************/ class rotaryEncoder { public: typedef enum Encoding { X2_ENCODING, X4_ENCODING } Encoding; rotaryEncoder(PinName channelA, PinName channelB, int pulsesPerRev, Encoding encoding = X2_ENCODING); /******************************************* * Membuat interface dari encoder * @param inA DigitalIn, out A dari encoder * @param inB DigitalIn, out B dari encoder *******************************************/ void reset(void); /******************************************* * Reset encoder. * Reset pembacaaan menjadi 0 *******************************************/ int getPulses(void); /******************************************* * Membaca pulse yang didapat oleh encoder * @return Nilai pulse yang telah dilalui. *******************************************/ int getRevolutions(void); /******************************************* * Membaca putaran yang didapat oleh encoder * @return Nilai revolusi/putaran yang telah dilalui. *******************************************/ private: void encode(void); /******************************************* * Menghitung pulse * Digunakan setiap rising/falling edge baik channel A atau B * Membaca putaran CW atau CCW => mengakibatkan pertambahan/pengurangan pulse *******************************************/ //VARIABEL UNTUK PERHITUNGAN PULSE Encoding encoding_; InterruptIn channelA_; InterruptIn channelB_; int pulsesPerRev_; int prevState_; int currState_; volatile int pulses_; volatile int revolutions_; }; #endif /* ROTARYENCODER_H */