BASE ROTASI OTOMATIS SEKUENSIAL

Dependencies:   Motor PID mbed millis

Committer:
gustavaditya
Date:
Sun Jun 11 19:22:01 2017 +0000
Revision:
0:312d1d0781ac
BASE ROTASI OTOMATIS SEKUENSIAL

Who changed what in which revision?

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