Juergen Gnoss
/
PolledQEI
A polled Quadrature encoder Class
PolledQEI.h@1:72e6e124a7e6, 2011-08-30 (annotated)
- Committer:
- jgnoss
- Date:
- Tue Aug 30 20:03:36 2011 +0000
- Revision:
- 1:72e6e124a7e6
- Parent:
- 0:7c16b1d2f01e
Added Phase Z and Rev Counter
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jgnoss | 1:72e6e124a7e6 | 1 | #ifndef _POLLED_QEI_H |
jgnoss | 1:72e6e124a7e6 | 2 | #define _POLLED_QEI_H |
jgnoss | 1:72e6e124a7e6 | 3 | |
jgnoss | 1:72e6e124a7e6 | 4 | #define CW 0 |
jgnoss | 1:72e6e124a7e6 | 5 | #define CCW 1 |
jgnoss | 1:72e6e124a7e6 | 6 | |
jgnoss | 1:72e6e124a7e6 | 7 | |
jgnoss | 1:72e6e124a7e6 | 8 | class PolledQEI { |
jgnoss | 1:72e6e124a7e6 | 9 | public: |
jgnoss | 1:72e6e124a7e6 | 10 | |
jgnoss | 1:72e6e124a7e6 | 11 | |
jgnoss | 1:72e6e124a7e6 | 12 | |
jgnoss | 1:72e6e124a7e6 | 13 | PolledQEI() { |
jgnoss | 1:72e6e124a7e6 | 14 | error("Constructor needs 2(3) Pin as parameters"); |
jgnoss | 1:72e6e124a7e6 | 15 | }; |
jgnoss | 1:72e6e124a7e6 | 16 | |
jgnoss | 1:72e6e124a7e6 | 17 | /** PolledQEI constructor |
jgnoss | 1:72e6e124a7e6 | 18 | * |
jgnoss | 1:72e6e124a7e6 | 19 | * @param PinName PhaseA and PinName PhaseB |
jgnoss | 1:72e6e124a7e6 | 20 | * are a valid pin that supports DigitalIn |
jgnoss | 1:72e6e124a7e6 | 21 | */ |
jgnoss | 1:72e6e124a7e6 | 22 | PolledQEI(PinName a, PinName b) { |
jgnoss | 1:72e6e124a7e6 | 23 | init( a, b, NC ); |
jgnoss | 1:72e6e124a7e6 | 24 | } |
jgnoss | 1:72e6e124a7e6 | 25 | |
jgnoss | 1:72e6e124a7e6 | 26 | /** PolledQEI constructor |
jgnoss | 1:72e6e124a7e6 | 27 | * |
jgnoss | 1:72e6e124a7e6 | 28 | * @param PinName PhaseA and PinName PhaseB and PinName PhaseZ |
jgnoss | 1:72e6e124a7e6 | 29 | * are a valid pin that supports DigitalIn |
jgnoss | 1:72e6e124a7e6 | 30 | */ |
jgnoss | 1:72e6e124a7e6 | 31 | PolledQEI(PinName a, PinName b, PinName z) { |
jgnoss | 1:72e6e124a7e6 | 32 | init( a, b, z ); |
jgnoss | 1:72e6e124a7e6 | 33 | } |
jgnoss | 1:72e6e124a7e6 | 34 | |
jgnoss | 1:72e6e124a7e6 | 35 | /** PolledQEI destructor |
jgnoss | 1:72e6e124a7e6 | 36 | */ |
jgnoss | 1:72e6e124a7e6 | 37 | ~PolledQEI() { |
jgnoss | 1:72e6e124a7e6 | 38 | if ( _ticker ) delete( _ticker ); |
jgnoss | 1:72e6e124a7e6 | 39 | if ( _phaseA ) delete( _phaseA ); |
jgnoss | 1:72e6e124a7e6 | 40 | if ( _phaseB ) delete( _phaseB ); |
jgnoss | 1:72e6e124a7e6 | 41 | if ( _phaseZ ) delete( _phaseZ ); |
jgnoss | 1:72e6e124a7e6 | 42 | } |
jgnoss | 1:72e6e124a7e6 | 43 | |
jgnoss | 1:72e6e124a7e6 | 44 | /** Set the sampling time in microseconds. |
jgnoss | 1:72e6e124a7e6 | 45 | * |
jgnoss | 1:72e6e124a7e6 | 46 | * @param int The time between pin samples in microseconds. |
jgnoss | 1:72e6e124a7e6 | 47 | */ |
jgnoss | 1:72e6e124a7e6 | 48 | void setSampleFrequency(int i); |
jgnoss | 1:72e6e124a7e6 | 49 | int pos(void); |
jgnoss | 1:72e6e124a7e6 | 50 | int dir(void); |
jgnoss | 1:72e6e124a7e6 | 51 | int rev(void); |
jgnoss | 1:72e6e124a7e6 | 52 | |
jgnoss | 1:72e6e124a7e6 | 53 | |
jgnoss | 1:72e6e124a7e6 | 54 | private: |
jgnoss | 1:72e6e124a7e6 | 55 | |
jgnoss | 1:72e6e124a7e6 | 56 | |
jgnoss | 1:72e6e124a7e6 | 57 | protected: |
jgnoss | 1:72e6e124a7e6 | 58 | DigitalIn *_phaseA; |
jgnoss | 1:72e6e124a7e6 | 59 | DigitalIn *_phaseB; |
jgnoss | 1:72e6e124a7e6 | 60 | InterruptIn *_phaseZ; |
jgnoss | 1:72e6e124a7e6 | 61 | Ticker *_ticker; |
jgnoss | 1:72e6e124a7e6 | 62 | int _sample_uSec; |
jgnoss | 1:72e6e124a7e6 | 63 | unsigned int _actEncPos; |
jgnoss | 1:72e6e124a7e6 | 64 | unsigned int _actEncRev; |
jgnoss | 1:72e6e124a7e6 | 65 | int _dir; |
jgnoss | 1:72e6e124a7e6 | 66 | unsigned int last; |
jgnoss | 1:72e6e124a7e6 | 67 | |
jgnoss | 1:72e6e124a7e6 | 68 | void init(PinName a, PinName b, PinName z); |
jgnoss | 1:72e6e124a7e6 | 69 | void check (void); |
jgnoss | 1:72e6e124a7e6 | 70 | void countRev(void); |
jgnoss | 1:72e6e124a7e6 | 71 | |
jgnoss | 1:72e6e124a7e6 | 72 | }; |
jgnoss | 1:72e6e124a7e6 | 73 | |
jgnoss | 0:7c16b1d2f01e | 74 | #endif |