BacaMotor

Dependencies:   mbed Motornew millis

Committer:
tamamfirdaus
Date:
Mon Mar 18 15:15:43 2019 +0000
Revision:
0:b6f3a4e90aff
BacaMotor;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tamamfirdaus 0:b6f3a4e90aff 1 /**
tamamfirdaus 0:b6f3a4e90aff 2 * Header Encoder KRAI
tamamfirdaus 0:b6f3a4e90aff 3 * untuk membaca nilai rotary encoder
tamamfirdaus 0:b6f3a4e90aff 4 **/
tamamfirdaus 0:b6f3a4e90aff 5 #ifndef ENCODERKRAI_H
tamamfirdaus 0:b6f3a4e90aff 6 #define ENCODERKRAI_H
tamamfirdaus 0:b6f3a4e90aff 7
tamamfirdaus 0:b6f3a4e90aff 8 //Bismillahirahamnirahim
tamamfirdaus 0:b6f3a4e90aff 9
tamamfirdaus 0:b6f3a4e90aff 10 //LIBRARY
tamamfirdaus 0:b6f3a4e90aff 11 #include "mbed.h"
tamamfirdaus 0:b6f3a4e90aff 12
tamamfirdaus 0:b6f3a4e90aff 13 /**************************
tamamfirdaus 0:b6f3a4e90aff 14 * Konstanta dan Variabel *
tamamfirdaus 0:b6f3a4e90aff 15 **************************/
tamamfirdaus 0:b6f3a4e90aff 16
tamamfirdaus 0:b6f3a4e90aff 17 //KONSTANTA
tamamfirdaus 0:b6f3a4e90aff 18 #define PREV_MASK 0x1 //Konstanta untuk mengetahui previous direction
tamamfirdaus 0:b6f3a4e90aff 19 #define CURR_MASK 0x2 //Konstanta untuk mengetahui current direction
tamamfirdaus 0:b6f3a4e90aff 20 #define INVALID 0x3 //XORing two states where both bits have changed.
tamamfirdaus 0:b6f3a4e90aff 21
tamamfirdaus 0:b6f3a4e90aff 22 /********************************
tamamfirdaus 0:b6f3a4e90aff 23 * Quadrature Encoder Interface *
tamamfirdaus 0:b6f3a4e90aff 24 ********************************/
tamamfirdaus 0:b6f3a4e90aff 25
tamamfirdaus 0:b6f3a4e90aff 26 class encoderKRAI {
tamamfirdaus 0:b6f3a4e90aff 27
tamamfirdaus 0:b6f3a4e90aff 28 public:
tamamfirdaus 0:b6f3a4e90aff 29
tamamfirdaus 0:b6f3a4e90aff 30 typedef enum Encoding {
tamamfirdaus 0:b6f3a4e90aff 31
tamamfirdaus 0:b6f3a4e90aff 32 X2_ENCODING,
tamamfirdaus 0:b6f3a4e90aff 33 X4_ENCODING
tamamfirdaus 0:b6f3a4e90aff 34
tamamfirdaus 0:b6f3a4e90aff 35 } Encoding;
tamamfirdaus 0:b6f3a4e90aff 36
tamamfirdaus 0:b6f3a4e90aff 37 encoderKRAI(PinName channelA, PinName channelB, int pulsesPerRev, Encoding encoding = X2_ENCODING);
tamamfirdaus 0:b6f3a4e90aff 38 /*******************************************
tamamfirdaus 0:b6f3a4e90aff 39 * Membuat interface dari encoder
tamamfirdaus 0:b6f3a4e90aff 40 * @param inA DigitalIn, out A dari encoder
tamamfirdaus 0:b6f3a4e90aff 41 * @param inB DigitalIn, out B dari encoder
tamamfirdaus 0:b6f3a4e90aff 42 *******************************************/
tamamfirdaus 0:b6f3a4e90aff 43
tamamfirdaus 0:b6f3a4e90aff 44 void reset(void);
tamamfirdaus 0:b6f3a4e90aff 45 /*******************************************
tamamfirdaus 0:b6f3a4e90aff 46 * Reset encoder.
tamamfirdaus 0:b6f3a4e90aff 47 * Reset pembacaaan menjadi 0
tamamfirdaus 0:b6f3a4e90aff 48 *******************************************/
tamamfirdaus 0:b6f3a4e90aff 49
tamamfirdaus 0:b6f3a4e90aff 50 int getPulses(void);
tamamfirdaus 0:b6f3a4e90aff 51 /*******************************************
tamamfirdaus 0:b6f3a4e90aff 52 * Membaca pulse yang didapat oleh encoder
tamamfirdaus 0:b6f3a4e90aff 53 * @return Nilai pulse yang telah dilalui.
tamamfirdaus 0:b6f3a4e90aff 54 *******************************************/
tamamfirdaus 0:b6f3a4e90aff 55
tamamfirdaus 0:b6f3a4e90aff 56 int getRevolutions(void);
tamamfirdaus 0:b6f3a4e90aff 57 /*******************************************
tamamfirdaus 0:b6f3a4e90aff 58 * Membaca putaran yang didapat oleh encoder
tamamfirdaus 0:b6f3a4e90aff 59 * @return Nilai revolusi/putaran yang telah dilalui.
tamamfirdaus 0:b6f3a4e90aff 60 *******************************************/
tamamfirdaus 0:b6f3a4e90aff 61
tamamfirdaus 0:b6f3a4e90aff 62 private:
tamamfirdaus 0:b6f3a4e90aff 63
tamamfirdaus 0:b6f3a4e90aff 64 void encode(void);
tamamfirdaus 0:b6f3a4e90aff 65 /*******************************************
tamamfirdaus 0:b6f3a4e90aff 66 * Menghitung pulse
tamamfirdaus 0:b6f3a4e90aff 67 * Digunakan setiap rising/falling edge baik channel A atau B
tamamfirdaus 0:b6f3a4e90aff 68 * Membaca putaran CW atau CCW => mengakibatkan pertambahan/pengurangan pulse
tamamfirdaus 0:b6f3a4e90aff 69 *******************************************/
tamamfirdaus 0:b6f3a4e90aff 70
tamamfirdaus 0:b6f3a4e90aff 71 //VARIABEL UNTUK PERHITUNGAN PULSE
tamamfirdaus 0:b6f3a4e90aff 72 Encoding encoding_;
tamamfirdaus 0:b6f3a4e90aff 73
tamamfirdaus 0:b6f3a4e90aff 74 InterruptIn channelA_;
tamamfirdaus 0:b6f3a4e90aff 75 InterruptIn channelB_;
tamamfirdaus 0:b6f3a4e90aff 76
tamamfirdaus 0:b6f3a4e90aff 77 int pulsesPerRev_;
tamamfirdaus 0:b6f3a4e90aff 78 int prevState_;
tamamfirdaus 0:b6f3a4e90aff 79 int currState_;
tamamfirdaus 0:b6f3a4e90aff 80
tamamfirdaus 0:b6f3a4e90aff 81 volatile int pulses_;
tamamfirdaus 0:b6f3a4e90aff 82 volatile int revolutions_;
tamamfirdaus 0:b6f3a4e90aff 83
tamamfirdaus 0:b6f3a4e90aff 84
tamamfirdaus 0:b6f3a4e90aff 85 };
tamamfirdaus 0:b6f3a4e90aff 86
tamamfirdaus 0:b6f3a4e90aff 87 #endif /* ENCODERKRAI_H */