Mercurial > micro-bot
diff bot.py @ 3:1dc1a2e5e642 default tip
add some comments
| author | Radomir Dopieralski <bitbucket@sheep.art.pl> |
|---|---|
| date | Wed, 20 Mar 2019 23:15:39 +0000 |
| parents | 6dcf45d13f35 |
| children |
line wrap: on
line diff
--- a/bot.py Tue Mar 14 13:00:05 2017 +0100 +++ b/bot.py Wed Mar 20 23:15:39 2019 +0000 @@ -2,23 +2,30 @@ class Servo: + """A class for controlling continuous-rotation servos.""" + def __init__(self, pin, trim=0): - self.pin = pin - self.trim = trim - self.speed = 0 - self.pin.set_analog_period(20) + self.pin = pin # The pin to which the servo is connected. + self.trim = trim # What value makes the servo stop. + self.speed = 0 # Current speed. + self.pin.set_analog_period(20) # Servo needs 20Hz signal. def set_speed(self, speed): + """Sets the rotation speed of the servo, range is -90 to +90.""" + # Value of 25 gives us around 1000us, which is the minimum duty cycle + # for the servo. 125 is the maximum. self.pin.write_analog(int(25 + 100 * (90 + speed) / 180 + self.trim)) self.speed = speed class Robot: def __init__(self): + # Initialize the servos. Adjust the trim as needed. self.left_servo = Servo(microbit.pin0, 2) self.right_servo = Servo(microbit.pin1, 1) def go(self, distance): + """Make the robot go straight for a given distance.""" microbit.display.show(microbit.Image.ARROW_S) self.left_servo.set_speed(-90) self.right_servo.set_speed(90) @@ -26,6 +33,7 @@ self.stop() def turn(self, angle): + """Make the robot turn in place by given angle in degrees.""" if angle > 0: microbit.display.show(microbit.Image.ARROW_E) self.left_servo.set_speed(-90) @@ -39,24 +47,26 @@ self.stop() def stop(self): + """Make the robot stop.""" microbit.display.show(microbit.Image.DIAMOND) self.left_servo.set_speed(0) self.right_servo.set_speed(0) def get_distance(self): + """Use the distance sensor on pin2.""" return microbit.pin2.read_analog() -robot = Robot() +robot = Robot() # Create the robot object. while True: - robot.go(5) - if robot.get_distance() > 700: - robot.turn(20) - left_distance = robot.get_distance() - robot.turn(-40) - right_distance = robot.get_distance() - robot.turn(20) - if left_distance < right_distance: + robot.go(5) # Go forward 5 units. + if robot.get_distance() > 700: # If the distance sensor returns something... + robot.turn(20) # Turn 20 degrees one way. + left_distance = robot.get_distance() # Take a measurement. + robot.turn(-40) # Turn 20 degrees the other way (40 in total) + right_distance = robot.get_distance() # Take a measurement. + robot.turn(20) # Turn back straight. + if left_distance < right_distance: # Pick whatever side was further away. robot.turn(60) else: robot.turn(-60)
