annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
1 import microbit
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
2
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
3
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
4 class Servo:
3
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
5 """A class for controlling continuous-rotation servos."""
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
6
0
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
7 def __init__(self, pin, trim=0):
3
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
8 self.pin = pin # The pin to which the servo is connected.
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
9 self.trim = trim # What value makes the servo stop.
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
10 self.speed = 0 # Current speed.
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
11 self.pin.set_analog_period(20) # Servo needs 20Hz signal.
0
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
12
2
6dcf45d13f35 Rename servo methods to make more sense
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
13 def set_speed(self, speed):
3
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
14 """Sets the rotation speed of the servo, range is -90 to +90."""
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
15 # Value of 25 gives us around 1000us, which is the minimum duty cycle
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
16 # for the servo. 125 is the maximum.
2
6dcf45d13f35 Rename servo methods to make more sense
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
17 self.pin.write_analog(int(25 + 100 * (90 + speed) / 180 + self.trim))
6dcf45d13f35 Rename servo methods to make more sense
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
18 self.speed = speed
0
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
19
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
20
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
21 class Robot:
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
22 def __init__(self):
3
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
23 # Initialize the servos. Adjust the trim as needed.
0
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
24 self.left_servo = Servo(microbit.pin0, 2)
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
25 self.right_servo = Servo(microbit.pin1, 1)
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
26
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
27 def go(self, distance):
3
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
28 """Make the robot go straight for a given distance."""
0
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
29 microbit.display.show(microbit.Image.ARROW_S)
2
6dcf45d13f35 Rename servo methods to make more sense
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
30 self.left_servo.set_speed(-90)
6dcf45d13f35 Rename servo methods to make more sense
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
31 self.right_servo.set_speed(90)
0
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
32 microbit.sleep(int(distance * 2000 / 17))
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
33 self.stop()
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
34
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
35 def turn(self, angle):
3
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
36 """Make the robot turn in place by given angle in degrees."""
0
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
37 if angle > 0:
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
38 microbit.display.show(microbit.Image.ARROW_E)
2
6dcf45d13f35 Rename servo methods to make more sense
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
39 self.left_servo.set_speed(-90)
6dcf45d13f35 Rename servo methods to make more sense
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
40 self.right_servo.set_speed(-90)
0
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
41 microbit.sleep(int(angle * 64 / 9))
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
42 else:
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
43 microbit.display.show(microbit.Image.ARROW_W)
2
6dcf45d13f35 Rename servo methods to make more sense
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
44 self.left_servo.set_speed(90)
6dcf45d13f35 Rename servo methods to make more sense
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
45 self.right_servo.set_speed(90)
0
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
46 microbit.sleep(int(-angle * 64 / 9))
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
47 self.stop()
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
48
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
49 def stop(self):
3
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
50 """Make the robot stop."""
0
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
51 microbit.display.show(microbit.Image.DIAMOND)
2
6dcf45d13f35 Rename servo methods to make more sense
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
52 self.left_servo.set_speed(0)
6dcf45d13f35 Rename servo methods to make more sense
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
53 self.right_servo.set_speed(0)
0
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
54
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
55 def get_distance(self):
3
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
56 """Use the distance sensor on pin2."""
0
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
57 return microbit.pin2.read_analog()
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
58
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
59
3
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
60 robot = Robot() # Create the robot object.
0
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
61 while True:
3
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
62 robot.go(5) # Go forward 5 units.
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
63 if robot.get_distance() > 700: # If the distance sensor returns something...
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
64 robot.turn(20) # Turn 20 degrees one way.
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
65 left_distance = robot.get_distance() # Take a measurement.
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
66 robot.turn(-40) # Turn 20 degrees the other way (40 in total)
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
67 right_distance = robot.get_distance() # Take a measurement.
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
68 robot.turn(20) # Turn back straight.
1dc1a2e5e642 add some comments
Radomir Dopieralski <bitbucket@sheep.art.pl>
parents: 2
diff changeset
69 if left_distance < right_distance: # Pick whatever side was further away.
0
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
70 robot.turn(60)
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
71 else:
ce6b15e13fa9 Initial commit
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
72 robot.turn(-60)