t

Committer:
gatulz
Date:
Thu Oct 19 15:37:57 2017 +0000
Revision:
0:fbcacd686ff4
coba;

Who changed what in which revision?

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