You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

180 lines
3.5 KiB
Python

import machine
import servo
import time
i2c = machine.I2C(scl=machine.Pin(22), sda=machine.Pin(21))
# Tower pro MG90s
servos = servo.Servos(i2c, address=0x40, freq=50, min_us=600, max_us=2400, degrees=180)
INIT_POSITIONS = [
(0, 40),
(1, 90),
(2, 130),
(3, 90),
(4, 60),
(5, 90),
(6, 130),
(7, 90)
]
def init_legs():
for i, a, in INIT_POSITIONS:
servos.position(i, a)
def tip_forward(pause=1):
servos.position(7, 150)
servos.position(1, 30)
time.sleep(pause)
init_legs()
def tip_back(pause=1):
servos.position(3, 150)
servos.position(5, 30)
time.sleep(pause)
init_legs()
def lean_left(pause=1):
servos.position(7, 150)
servos.position(5, 30)
servos.position(3, 60)
servos.position(1, 120)
time.sleep(pause)
init_legs()
def lean_left(pause=1):
servos.position(7, 150)
servos.position(5, 30)
servos.position(3, 60)
servos.position(1, 120)
time.sleep(pause)
init_legs()
def lean_right(pause=1):
servos.position(7, 60)
servos.position(5, 120)
servos.position(3, 150)
servos.position(1, 30)
time.sleep(pause)
init_legs()
def look_left(pause=1):
servos.position(0, 10)
servos.position(2, 100)
servos.position(4, 30)
servos.position(6, 100)
time.sleep(pause)
init_legs()
def look_right(pause=1):
servos.position(0, 70)
servos.position(2, 160)
servos.position(4, 90)
servos.position(6, 160)
time.sleep(pause)
init_legs()
def all_move(pause=1):
moves = (
tip_forward, tip_back, lean_left, lean_right, look_left, look_right, fall, wave, turn_left, turn_right, turn_right,
turn_left)
for move in moves:
move(pause=pause)
time.sleep(0.5)
def turn_left(pause=None):
servos.position(0, 10)
servos.position(2, 100)
servos.position(4, 30)
servos.position(6, 100)
time.sleep(0.1)
servos.position(7, 120)
servos.position(6, 160)
time.sleep(0.1)
servos.position(7, 90)
time.sleep(0.1)
servos.position(3, 120)
servos.position(2, 160)
time.sleep(0.1)
servos.position(3, 90)
time.sleep(0.1)
servos.position(5, 30)
servos.position(4, 90)
time.sleep(0.1)
servos.position(5, 90)
time.sleep(0.1)
servos.position(1, 30)
servos.position(0, 90)
time.sleep(0.1)
servos.position(1, 90)
time.sleep(0.1)
init_legs()
def turn_right(pause=None):
servos.position(0, 70)
servos.position(2, 160)
servos.position(4, 90)
servos.position(6, 160)
time.sleep(0.1)
# front left
servos.position(1, 30)
servos.position(0, 10)
time.sleep(0.1)
servos.position(1, 90)
time.sleep(0.1)
# back right
servos.position(5, 30)
servos.position(4, 30)
time.sleep(0.1)
servos.position(5, 90)
time.sleep(0.1)
# front right
servos.position(7, 120)
servos.position(6, 60)
time.sleep(0.1)
servos.position(7, 90)
time.sleep(0.1)
# back left
servos.position(3, 120)
servos.position(2, 60)
time.sleep(0.1)
servos.position(3, 90)
time.sleep(0.1)
init_legs()
def wave(pause=None, times=3):
counter = times
while counter:
servos.position(7, 180)
time.sleep(0.1)
servos.position(7, 160)
time.sleep(0.1)
counter -= 1
servos.position(7, 90)
init_legs()
def fall(pause=1):
servos.position(3, 160)
servos.position(1, 30)
servos.position(5, 30)
servos.position(7, 160)
time.sleep(pause)
init_legs()
init_legs()