38
38
PIN_SONAR_2_ECHO = 8
39
39
PIN_SONAR_3_TRIGGER = 18
40
40
PIN_SONAR_3_ECHO = 23
41
+ PIN_ENCODER_LEFT = 14
42
+ PIN_ENCODER_RIGHT = 15
41
43
42
44
PWM_FREQUENCY = 100 #Hz
43
45
PWM_RANGE = 100 #0-100
@@ -51,6 +53,8 @@ class CoderBot:
51
53
def __init__ (self , servo = False , motor_trim_factor = 1.0 ):
52
54
self .pi = pigpio .pi ('localhost' )
53
55
self .pi .set_mode (PIN_PUSHBUTTON , pigpio .INPUT )
56
+ self .pi .set_mode (PIN_ENCODER_LEFT , pigpio .INPUT )
57
+ self .pi .set_mode (PIN_ENCODER_RIGHT , pigpio .INPUT )
54
58
self ._cb = dict ()
55
59
self ._cb_last_tick = dict ()
56
60
self ._cb_elapse = dict ()
@@ -61,6 +65,8 @@ def __init__(self, servo=False, motor_trim_factor=1.0):
61
65
else :
62
66
self .motor_control = self ._dc_motor
63
67
self ._cb1 = self .pi .callback (PIN_PUSHBUTTON , pigpio .EITHER_EDGE , coderbot_callback )
68
+ self ._cb2 = self .pi .callback (PIN_ENCODER_LEFT , pigpio .RISING_EDGE , coderbot_callback )
69
+ self ._cb3 = self .pi .callback (PIN_ENCODER_RIGHT , pigpio .RISING_EDGE , coderbot_callback )
64
70
for pin in self ._pin_out :
65
71
self .pi .set_PWM_frequency (pin , PWM_FREQUENCY )
66
72
self .pi .set_PWM_range (pin , PWM_RANGE )
@@ -74,6 +80,8 @@ def __init__(self, servo=False, motor_trim_factor=1.0):
74
80
75
81
def exit (self ):
76
82
self ._cb1 .cancel ()
83
+ self ._cb2 .cancel ()
84
+ self ._cb3 .cancel ()
77
85
for s in self .sonar :
78
86
s .cancel ()
79
87
@@ -177,21 +185,24 @@ def set_callback(self, gpio, callback, elapse):
177
185
self ._cb_last_tick [gpio ] = 0
178
186
179
187
def callback (self , gpio , level , tick ):
180
- cb = self ._cb .get (gpio )
181
- if cb :
182
- elapse = self ._cb_elapse .get (gpio )
183
- if level == 0 :
184
- self ._cb_last_tick [gpio ] = tick
185
- elif tick - self ._cb_last_tick [gpio ] > elapse :
186
- self ._cb_last_tick [gpio ] = tick
187
- print "pushed: " , level , tick
188
- cb ()
188
+ if gpio in [PIN_ENCODER_LEFT , PIN_ENCODER_RIGHT ]:
189
+ print ( "encoder: " + str (gpio ) + " level: " + str (level ) + " tick: " + str (tick ))
190
+ else :
191
+ cb = self ._cb .get (gpio )
192
+ if cb :
193
+ elapse = self ._cb_elapse .get (gpio )
194
+ if level == 0 :
195
+ self ._cb_last_tick [gpio ] = tick
196
+ elif tick - self ._cb_last_tick [gpio ] > elapse :
197
+ self ._cb_last_tick [gpio ] = tick
198
+ print "pushed: " , level , tick
199
+ cb ()
189
200
190
201
def halt (self ):
191
202
os .system ('sudo halt' )
192
203
193
204
def restart (self ):
194
- os .system ('sudo /etc/init.d/coderbot stop && sudo pkill -9 dbus && sudo /etc/init.d/coderbot start ' )
205
+ os .system ('sudo /etc/init.d/coderbot restart ' )
195
206
196
207
def reboot (self ):
197
208
os .system ('sudo reboot' )
0 commit comments