16 Mei 2019

Committer:
tamamfirdaus
Date:
Thu May 16 08:42:16 2019 +0000
Revision:
0:88b904c4ffbb
16 Mei 2019;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tamamfirdaus 0:88b904c4ffbb 1 /**
tamamfirdaus 0:88b904c4ffbb 2 * Header Encoder KRAI
tamamfirdaus 0:88b904c4ffbb 3 * untuk membaca nilai rotary encoder
tamamfirdaus 0:88b904c4ffbb 4 **/
tamamfirdaus 0:88b904c4ffbb 5 #ifndef ENCODERKRAI_H
tamamfirdaus 0:88b904c4ffbb 6 #define ENCODERKRAI_H
tamamfirdaus 0:88b904c4ffbb 7
tamamfirdaus 0:88b904c4ffbb 8 //Bismillahirahamnirahim
tamamfirdaus 0:88b904c4ffbb 9
tamamfirdaus 0:88b904c4ffbb 10 //LIBRARY
tamamfirdaus 0:88b904c4ffbb 11 #include "mbed.h"
tamamfirdaus 0:88b904c4ffbb 12
tamamfirdaus 0:88b904c4ffbb 13 /**************************
tamamfirdaus 0:88b904c4ffbb 14 * Konstanta dan Variabel *
tamamfirdaus 0:88b904c4ffbb 15 **************************/
tamamfirdaus 0:88b904c4ffbb 16
tamamfirdaus 0:88b904c4ffbb 17 //KONSTANTA
tamamfirdaus 0:88b904c4ffbb 18 #define PREV_MASK 0x1 //Konstanta untuk mengetahui previous direction
tamamfirdaus 0:88b904c4ffbb 19 #define CURR_MASK 0x2 //Konstanta untuk mengetahui current direction
tamamfirdaus 0:88b904c4ffbb 20 #define INVALID 0x3 //XORing two states where both bits have changed.
tamamfirdaus 0:88b904c4ffbb 21
tamamfirdaus 0:88b904c4ffbb 22 /********************************
tamamfirdaus 0:88b904c4ffbb 23 * Quadrature Encoder Interface *
tamamfirdaus 0:88b904c4ffbb 24 ********************************/
tamamfirdaus 0:88b904c4ffbb 25
tamamfirdaus 0:88b904c4ffbb 26 class encoderKRAI {
tamamfirdaus 0:88b904c4ffbb 27
tamamfirdaus 0:88b904c4ffbb 28 public:
tamamfirdaus 0:88b904c4ffbb 29
tamamfirdaus 0:88b904c4ffbb 30 typedef enum Encoding {
tamamfirdaus 0:88b904c4ffbb 31
tamamfirdaus 0:88b904c4ffbb 32 X2_ENCODING,
tamamfirdaus 0:88b904c4ffbb 33 X4_ENCODING
tamamfirdaus 0:88b904c4ffbb 34
tamamfirdaus 0:88b904c4ffbb 35 } Encoding;
tamamfirdaus 0:88b904c4ffbb 36
tamamfirdaus 0:88b904c4ffbb 37 encoderKRAI(PinName channelA, PinName channelB, int pulsesPerRev, Encoding encoding = X2_ENCODING);
tamamfirdaus 0:88b904c4ffbb 38 /*******************************************
tamamfirdaus 0:88b904c4ffbb 39 * Membuat interface dari encoder
tamamfirdaus 0:88b904c4ffbb 40 * @param inA DigitalIn, out A dari encoder
tamamfirdaus 0:88b904c4ffbb 41 * @param inB DigitalIn, out B dari encoder
tamamfirdaus 0:88b904c4ffbb 42 *******************************************/
tamamfirdaus 0:88b904c4ffbb 43
tamamfirdaus 0:88b904c4ffbb 44 void reset(void);
tamamfirdaus 0:88b904c4ffbb 45 /*******************************************
tamamfirdaus 0:88b904c4ffbb 46 * Reset encoder.
tamamfirdaus 0:88b904c4ffbb 47 * Reset pembacaaan menjadi 0
tamamfirdaus 0:88b904c4ffbb 48 *******************************************/
tamamfirdaus 0:88b904c4ffbb 49
tamamfirdaus 0:88b904c4ffbb 50 int getPulses(void);
tamamfirdaus 0:88b904c4ffbb 51 /*******************************************
tamamfirdaus 0:88b904c4ffbb 52 * Membaca pulse yang didapat oleh encoder
tamamfirdaus 0:88b904c4ffbb 53 * @return Nilai pulse yang telah dilalui.
tamamfirdaus 0:88b904c4ffbb 54 *******************************************/
tamamfirdaus 0:88b904c4ffbb 55
tamamfirdaus 0:88b904c4ffbb 56 int getRevolutions(void);
tamamfirdaus 0:88b904c4ffbb 57 /*******************************************
tamamfirdaus 0:88b904c4ffbb 58 * Membaca putaran yang didapat oleh encoder
tamamfirdaus 0:88b904c4ffbb 59 * @return Nilai revolusi/putaran yang telah dilalui.
tamamfirdaus 0:88b904c4ffbb 60 *******************************************/
tamamfirdaus 0:88b904c4ffbb 61
tamamfirdaus 0:88b904c4ffbb 62 private:
tamamfirdaus 0:88b904c4ffbb 63
tamamfirdaus 0:88b904c4ffbb 64 void encode(void);
tamamfirdaus 0:88b904c4ffbb 65 /*******************************************
tamamfirdaus 0:88b904c4ffbb 66 * Menghitung pulse
tamamfirdaus 0:88b904c4ffbb 67 * Digunakan setiap rising/falling edge baik channel A atau B
tamamfirdaus 0:88b904c4ffbb 68 * Membaca putaran CW atau CCW => mengakibatkan pertambahan/pengurangan pulse
tamamfirdaus 0:88b904c4ffbb 69 *******************************************/
tamamfirdaus 0:88b904c4ffbb 70
tamamfirdaus 0:88b904c4ffbb 71 //VARIABEL UNTUK PERHITUNGAN PULSE
tamamfirdaus 0:88b904c4ffbb 72 Encoding encoding_;
tamamfirdaus 0:88b904c4ffbb 73
tamamfirdaus 0:88b904c4ffbb 74 InterruptIn channelA_;
tamamfirdaus 0:88b904c4ffbb 75 InterruptIn channelB_;
tamamfirdaus 0:88b904c4ffbb 76
tamamfirdaus 0:88b904c4ffbb 77 int pulsesPerRev_;
tamamfirdaus 0:88b904c4ffbb 78 int prevState_;
tamamfirdaus 0:88b904c4ffbb 79 int currState_;
tamamfirdaus 0:88b904c4ffbb 80
tamamfirdaus 0:88b904c4ffbb 81 volatile int pulses_;
tamamfirdaus 0:88b904c4ffbb 82 volatile int revolutions_;
tamamfirdaus 0:88b904c4ffbb 83
tamamfirdaus 0:88b904c4ffbb 84
tamamfirdaus 0:88b904c4ffbb 85 };
tamamfirdaus 0:88b904c4ffbb 86
tamamfirdaus 0:88b904c4ffbb 87 #endif /* ENCODERKRAI_H */