code encoderKRTMI 2019

Committer:
SalbiFaza
Date:
Sat Feb 23 11:15:53 2019 +0000
Revision:
0:fd29d4db8c40
Bismillah

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SalbiFaza 0:fd29d4db8c40 1 #ifndef ENCODERKRTMI_H
SalbiFaza 0:fd29d4db8c40 2 #define ENCODERKRTMI_H
SalbiFaza 0:fd29d4db8c40 3
SalbiFaza 0:fd29d4db8c40 4 /**
SalbiFaza 0:fd29d4db8c40 5 * Includes
SalbiFaza 0:fd29d4db8c40 6 */
SalbiFaza 0:fd29d4db8c40 7 #include "mbed.h"
SalbiFaza 0:fd29d4db8c40 8
SalbiFaza 0:fd29d4db8c40 9 /**
SalbiFaza 0:fd29d4db8c40 10 * Defines
SalbiFaza 0:fd29d4db8c40 11 */
SalbiFaza 0:fd29d4db8c40 12 #define PREV_MASK 0x1 //Mask for the previous state in determining direction
SalbiFaza 0:fd29d4db8c40 13 //of rotation.
SalbiFaza 0:fd29d4db8c40 14 #define CURR_MASK 0x2 //Mask for the current state in determining direction
SalbiFaza 0:fd29d4db8c40 15 //of rotation.
SalbiFaza 0:fd29d4db8c40 16 #define INVALID 0x3 //XORing two states where both bits have changed.
SalbiFaza 0:fd29d4db8c40 17
SalbiFaza 0:fd29d4db8c40 18 /**
SalbiFaza 0:fd29d4db8c40 19 * Quadrature Encoder Interface.
SalbiFaza 0:fd29d4db8c40 20 */
SalbiFaza 0:fd29d4db8c40 21 class encoderKRTMI {
SalbiFaza 0:fd29d4db8c40 22
SalbiFaza 0:fd29d4db8c40 23 public:
SalbiFaza 0:fd29d4db8c40 24
SalbiFaza 0:fd29d4db8c40 25 typedef enum Encoding {
SalbiFaza 0:fd29d4db8c40 26
SalbiFaza 0:fd29d4db8c40 27 X2_ENCODING,
SalbiFaza 0:fd29d4db8c40 28 X4_ENCODING
SalbiFaza 0:fd29d4db8c40 29
SalbiFaza 0:fd29d4db8c40 30 } Encoding;
SalbiFaza 0:fd29d4db8c40 31
SalbiFaza 0:fd29d4db8c40 32 /** Membuat interface dari encoder
SalbiFaza 0:fd29d4db8c40 33 *
SalbiFaza 0:fd29d4db8c40 34 * @param inA DigitalIn, out A dari encoder
SalbiFaza 0:fd29d4db8c40 35 * @param inB DigitalIn, out B dari encoder
SalbiFaza 0:fd29d4db8c40 36 */
SalbiFaza 0:fd29d4db8c40 37 encoderKRTMI(PinName channelA, PinName channelB, int pulsesPerRev, Encoding encoding = X2_ENCODING);
SalbiFaza 0:fd29d4db8c40 38
SalbiFaza 0:fd29d4db8c40 39 /**
SalbiFaza 0:fd29d4db8c40 40 * Reset encoder.
SalbiFaza 0:fd29d4db8c40 41 *
SalbiFaza 0:fd29d4db8c40 42 * Menset pulse dan revolusi/putaran menjadi 0
SalbiFaza 0:fd29d4db8c40 43 */
SalbiFaza 0:fd29d4db8c40 44 void reset(void);
SalbiFaza 0:fd29d4db8c40 45
SalbiFaza 0:fd29d4db8c40 46 /**
SalbiFaza 0:fd29d4db8c40 47 * Membaca pulse yang didapat oleh encoder
SalbiFaza 0:fd29d4db8c40 48 *
SalbiFaza 0:fd29d4db8c40 49 * @return Nilai pulse yang telah dilalui.
SalbiFaza 0:fd29d4db8c40 50 */
SalbiFaza 0:fd29d4db8c40 51 int getPulses(void);
SalbiFaza 0:fd29d4db8c40 52
SalbiFaza 0:fd29d4db8c40 53 /**
SalbiFaza 0:fd29d4db8c40 54 * Membaca putaran yang didapat oleh encoder
SalbiFaza 0:fd29d4db8c40 55 *
SalbiFaza 0:fd29d4db8c40 56 * @return Nilai revolusi/putaran yang telah dilalui.
SalbiFaza 0:fd29d4db8c40 57 */
SalbiFaza 0:fd29d4db8c40 58 int getRevolutions(void);
SalbiFaza 0:fd29d4db8c40 59
SalbiFaza 0:fd29d4db8c40 60 /**
SalbiFaza 0:fd29d4db8c40 61 * Membaca pulse yang didapat oleh encoder
SalbiFaza 0:fd29d4db8c40 62 *
SalbiFaza 0:fd29d4db8c40 63 * @return Nilai pulse yang telah dilalui.
SalbiFaza 0:fd29d4db8c40 64 */
SalbiFaza 0:fd29d4db8c40 65 //int readDeltaPulses(void);
SalbiFaza 0:fd29d4db8c40 66
SalbiFaza 0:fd29d4db8c40 67 /**
SalbiFaza 0:fd29d4db8c40 68 * Membaca putaran yang didapat oleh encoder
SalbiFaza 0:fd29d4db8c40 69 *
SalbiFaza 0:fd29d4db8c40 70 * @return Nilai revolusi/putaran yang telah dilalui.
SalbiFaza 0:fd29d4db8c40 71 */
SalbiFaza 0:fd29d4db8c40 72 //int readDeltaRevolutions(void);
SalbiFaza 0:fd29d4db8c40 73
SalbiFaza 0:fd29d4db8c40 74 private:
SalbiFaza 0:fd29d4db8c40 75
SalbiFaza 0:fd29d4db8c40 76 /**
SalbiFaza 0:fd29d4db8c40 77 * Menghitung pulse
SalbiFaza 0:fd29d4db8c40 78 *
SalbiFaza 0:fd29d4db8c40 79 * Digunakan setiap rising/falling edge baik channel A atau B
SalbiFaza 0:fd29d4db8c40 80 * Membaca putaran CW atau CCW => mengakibatkan pertambahan/pengurangan pulse
SalbiFaza 0:fd29d4db8c40 81 */
SalbiFaza 0:fd29d4db8c40 82 void encode(void);
SalbiFaza 0:fd29d4db8c40 83
SalbiFaza 0:fd29d4db8c40 84 /**
SalbiFaza 0:fd29d4db8c40 85 * Indeks setiap rising edge untuk menghitung putaran
SalbiFaza 0:fd29d4db8c40 86 * Nilai bertambah 1
SalbiFaza 0:fd29d4db8c40 87 */
SalbiFaza 0:fd29d4db8c40 88 //void index(void);
SalbiFaza 0:fd29d4db8c40 89
SalbiFaza 0:fd29d4db8c40 90 Encoding encoding_;
SalbiFaza 0:fd29d4db8c40 91
SalbiFaza 0:fd29d4db8c40 92 InterruptIn channelA_;
SalbiFaza 0:fd29d4db8c40 93 InterruptIn channelB_;
SalbiFaza 0:fd29d4db8c40 94 //InterruptIn index_;
SalbiFaza 0:fd29d4db8c40 95
SalbiFaza 0:fd29d4db8c40 96 int pulsesPerRev_;
SalbiFaza 0:fd29d4db8c40 97 int prevState_;
SalbiFaza 0:fd29d4db8c40 98 int currState_;
SalbiFaza 0:fd29d4db8c40 99
SalbiFaza 0:fd29d4db8c40 100 volatile int pulses_;
SalbiFaza 0:fd29d4db8c40 101 volatile int revolutions_;
SalbiFaza 0:fd29d4db8c40 102
SalbiFaza 0:fd29d4db8c40 103
SalbiFaza 0:fd29d4db8c40 104 };
SalbiFaza 0:fd29d4db8c40 105
SalbiFaza 0:fd29d4db8c40 106 #endif /* ENCODERKRTMI_H */