Update 18 Februari 2017, PID laucnher dan Base sudah diperbarui

Dependencies:   Motor PID Joystick_OrdoV5 mbed millis

Fork of MainProgram_BaseBaru_otomatis-reloader by KRAI 2017

Committer:
rahmadirizki18
Date:
Tue Nov 22 15:30:31 2016 +0000
Revision:
5:3aa203218306
lintasan masih curve, balik ke posisi awal masih error besar

Who changed what in which revision?

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