-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathAB_phase_encoder.h
More file actions
72 lines (67 loc) · 2.22 KB
/
AB_phase_encoder.h
File metadata and controls
72 lines (67 loc) · 2.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
* AB phase encoder library, using to collect encoder data from encoder
* Copyright (C) 2017 Liu Chaoyang
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
**/
#ifndef AB_PHASE_ENCODER_H
#define AB_PHASE_ENCODER_H
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#define LEFT 1
#define RIGHT 0
class ABPhaseEncoders
{
private:
static ABPhaseEncoders *ISRCaller;
// Two pins of left encoder:A output & B output
byte leftApin; byte leftBpin;
// Two pins of left encoder:A output & B output
byte rightApin; byte rightBpin;
// Recording rotation directions of encoders
boolean leftDirect; boolean rightDirect;
// If value of encoders is reversed, just reverse them
boolean leftReversed; boolean rightReversed;
// Recording value of pins
byte leftLastValue; byte rightLastValue;
// Recording counts of encoders
volatile long leftDur; volatile long rightDur;
void initEncoder();
// Parameters of arduino built-in function, used to call ISR.
static void callLeftISR();
static void callRightISR();
// ISRs of encoders
void leftEncoderISR();
void rightEncoderISR();
public:
ABPhaseEncoders(byte leftApin, byte leftBpin, byte rightApin, byte rightBpin)
: leftApin(leftApin), leftBpin(leftBpin),
rightApin(rightApin), rightBpin(rightBpin)
{
ISRCaller = this;
initEncoder();
}
long readEncoder(int i);
// Clear count of encoder
void resetEncoder(int i);
// Clear count of encoders
void resetEncoders();
// // When you get reversed value, just reverse it
void leftReverse();
void rightReverse();
};
#endif