-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathrobot.py
52 lines (41 loc) · 1.71 KB
/
robot.py
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
from Raspi_MotorHAT import Raspi_MotorHAT
from gpiozero import LineSensor
import atexit
class Robot(object):
def __init__(self, motorhat_addr=0x6f):
# Setup the motorhat with the passed in address
self._mh = Raspi_MotorHAT(addr=motorhat_addr)
# get local variable for each motor
self.left_motor = self._mh.getMotor(1)
self.right_motor = self._mh.getMotor(2)
# ensure the motors get stopped when the code exits
atexit.register(self.stop_all)
# Setup the line sensors
self.left_line_sensor = LineSensor(23, queue_len=3, pull_up=True)
self.right_line_sensor = LineSensor(16, queue_len=3, pull_up=True)
def stop_all(self):
self.stop_motors()
# Clear any sensor handlers
self.left_line_sensor.when_line = None
self.left_line_sensor.when_no_line = None
self.right_line_sensor.when_line = None
self.right_line_sensor.when_no_line = None
def convert_speed(self, speed):
mode = Raspi_MotorHAT.RELEASE
if speed > 0:
mode = Raspi_MotorHAT.FORWARD
elif speed < 0:
mode = Raspi_MotorHAT.BACKWARD
output_speed = (abs(speed) * 255) / 100
return mode, int(output_speed)
def set_left(self, speed):
mode, output_speed = self.convert_speed(speed)
self.left_motor.setSpeed(output_speed)
self.left_motor.run(mode)
def set_right(self, speed):
mode, output_speed = self.convert_speed(speed)
self.right_motor.setSpeed(output_speed)
self.right_motor.run(mode)
def stop_motors(self):
self.left_motor.run(Raspi_MotorHAT.RELEASE)
self.right_motor.run(Raspi_MotorHAT.RELEASE)