Mercurial > micropython-micro-bob
diff mu_code/bot.py @ 0:48c36bed0f61 draft default tip
Initial commit
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Mon, 15 May 2017 16:43:11 +0200 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mu_code/bot.py Mon May 15 16:43:11 2017 +0200 @@ -0,0 +1,125 @@ +import microbit +import radio + +class Servo: + def __init__(self, pin, trim=0): + self.pin = pin + self.trim = trim + self.position = 90 + self.set_period() + + def set_period(self): + self.pin.set_analog_period(20) + self.write(self.position) + microbit.sleep(80) + self.pin.set_analog_period(20) + self.write(self.position) + microbit.sleep(80) + self.pin.write_analog(0) + + def write(self, degrees): + self.pin.write_analog(int(25 + 100 * degrees / 180 + self.trim)) + self.position = degrees + + def move(self, degrees, delay=8): + if degrees > self.position: + step = 1 + else: + step = -1 + for position in range(self.position, degrees, step): + self.write(position) + microbit.sleep(delay) + + +class Robot: + NORMAL_FACE = microbit.Image( + "42024\n" + "90009\n" + "00000\n" + "61016\n" + "27972\n" + ) + LEFT_FACE = microbit.Image( + "24024\n" + "09009\n" + "00000\n" + "81001\n" + "28952\n" + ) + RIGHT_FACE = microbit.Image( + "42042\n" + "90090\n" + "00000\n" + "10018\n" + "25983\n" + ) + + def __init__(self): + self.feet_servo = Servo(microbit.pin2, -2) + self.left_servo = Servo(microbit.pin1, 2) + self.right_servo = Servo(microbit.pin0, 2) + microbit.display.show(self.NORMAL_FACE) + + def right_step(self): + microbit.display.show(self.RIGHT_FACE) + self.feet_servo.move(130) + self.left_servo.move(70) + self.right_servo.move(70) + self.feet_servo.move(90) + + def left_step(self): + microbit.display.show(self.LEFT_FACE) + self.feet_servo.move(50) + self.right_servo.move(110) + self.left_servo.move(110) + self.feet_servo.move(90) + + def right_half_step(self): + microbit.display.show(self.NORMAL_FACE) + self.feet_servo.move(110) + self.left_servo.move(90) + self.right_servo.move(90) + self.feet_servo.move(90) + + def left_half_step(self): + microbit.display.show(self.NORMAL_FACE) + self.feet_servo.move(70) + self.right_servo.move(90) + self.left_servo.move(90) + self.feet_servo.move(90) + + + def walk(self, steps=1): + step = 0 + for step in range(steps - 1): + if step % 2: + self.left_step() + else: + self.right_step() + if step % 2: + self.right_half_step() + else: + self.left_half_step() + + +robot = Robot() +radio.on() +left_leg = True +command = None +while True: + received = None + while received is not None: + command = received + received = radio.receive() + if command == 'step': + if left_leg: + robot.right_step() + else: + robot.left_step() + left_leg = not left_leg + elif command == 'stop': + if left_leg: + robot.right_half_step() + else: + robot.left_half_step() + command = None \ No newline at end of file
