Kodingan KRAI 2017

Dependencies:   mbed DigitDisplay PID Motor Ping millis

Committer:
SalbiFaza
Date:
Sun Feb 24 10:39:24 2019 +0000
Revision:
0:dd4c20b9a83e
bismillah

Who changed what in which revision?

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