Code: Select all
from microbit import *
"""
一个控制舵机的简单类。
参数:
pin (pin0 .. pin3):连接servo的引脚。
min_us(int):servo支持的最小信号长度。
max_us(int):servo支持的最大信号长度。
angle(int) :最小和最大位置之间的角度。
"""
class Servo:
def __init__(self, pin, min_us=600, max_us=2400, angle=180):
self.pin = pin
self.min_us = min_us
self.max_us = max_us
self.us = 0
self.angle = angle
# 将输出的PWM信号的周期设置为20毫秒
self.pin.set_analog_period(20)
# 将微秒数转成模拟量值 (模拟量值1024对应20000 us即20毫秒)
def write_us(self, us):
us = min(self.max_us, max(self.min_us, us))
duty = round(us * 1024 // 20000)
self.pin.write_analog(duty)
# 将角度转成微秒数 (min_us对应0度,max_us对应180度)
def write_angle(self, degrees=0):
degrees = degrees % 360
total_range = self.max_us - self.min_us
us = self.min_us + total_range * degrees // self.angle
self.write_us(us)
if __name__ == "__main__":
# 说明:如果你的舵机不能转到指定的角度,可以将min_us和max_us值微调
# 我在这里,将min_us=600调整到500, 将max_us=2400调整到2450
# 注意:只能微调,不然舵机损坏。
sv1 = Servo(pin2, 500, 2450, 180)
for i in range(6):
sv1.write_angle(180)
sleep(1000)
sv1.write_angle(0)
sleep(1000)