@@ -34,17 +34,31 @@ def __init__(self, pi, feedback_pin_A, feedback_pin_B, callback):
34
34
it returns a 1 if the square waves have A leading B because we're moving forward
35
35
It returns a -1 if the square waves have B leading A because we're moving backwards
36
36
In either case, A is staggered from B by (+-)pi/2 radiants
37
+ Note: level = 0 falling edge
38
+ 1 raising edge
39
+ 2 from watchdog
37
40
38
41
+---------+ +---------+ 0
39
42
| | | |
40
43
A | | | |
41
44
| | | |
42
45
----+ +---------+ +----------+ 1 # A leading B
43
- +---------+ +---------+ 0 # forward
46
+ +---------+ +---------+ 0 # backward
44
47
| | | |
45
48
B | | | |
46
49
| | | |
47
50
+---------+ +---------+ +----- 1
51
+
52
+ +---------+ +---------+ 0
53
+ | | | |
54
+ A | | | |
55
+ | | | |
56
+ +---------+ +---------+ +----- 1 # B leading A
57
+ +---------+ +---------+ 0 # forward
58
+ | | | |
59
+ B | | | |
60
+ | | | |
61
+ ----+ +---------+ +----------+ 1
48
62
"""
49
63
def _pulse (self , gpio , level , tick ):
50
64
# interrupt comes from pin A
@@ -57,22 +71,25 @@ def _pulse(self, gpio, level, tick):
57
71
if (gpio != self ._lastGpio ): # debounce
58
72
self ._lastGpio = gpio
59
73
74
+ # backward (A leading B)
60
75
if (gpio == self ._feedback_pin_A and level == 1 ):
61
76
if (self ._levelB == 0 ):
62
- self ._callback (1 ) # A leading B, moving forward
63
- self ._direction = 1 # forward
77
+ self ._callback (- 1 ) # A leading B, moving forward
78
+ self ._direction = - 1 # backward
64
79
elif (gpio == self ._feedback_pin_A and level == 0 ):
65
80
if (self ._levelB == 1 ):
66
- self ._callback (1 ) # A leading B, moving forward
67
- self ._direction = 1 # forward
81
+ self ._callback (- 1 ) # A leading B, moving forward
82
+ self ._direction = - 1 # backward
83
+
84
+ # forward (B leading A)
68
85
elif (gpio == self ._feedback_pin_B and level == 1 ):
69
86
if (self ._levelA == 0 ):
70
- self ._callback (- 1 ) # B leading A, moving forward
71
- self ._direction = - 1 # backwards
87
+ self ._callback (1 ) # B leading A, moving forward
88
+ self ._direction = 1 # forward
72
89
elif (gpio == self ._feedback_pin_B and level == 0 ):
73
90
if (self ._levelA == 1 ):
74
- self ._callback (- 1 ) # A leading B, moving forward
75
- self ._direction = - 1 # forward
91
+ self ._callback (1 ) # A leading B, moving forward
92
+ self ._direction = 1 # forward
76
93
77
94
def cancel (self ):
78
95
0 commit comments