udah bisa looo

Dependencies:   mbed

Committer:
Yolandataniaa
Date:
Thu Feb 27 12:40:03 2020 +0000
Revision:
0:aa8e05bc0533
good pid

Who changed what in which revision?

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