python+adafruit_pca9685 测试舵机存储当前角度
测试代码如下:
# -*- coding: UTF-8 -*-
import time
from board import SCL, SDA
import busio
from adafruit_pca9685 import PCA9685
from adafruit_motor import servo'''
测试控制1块驱动板或者多块
pip install Adafruit-PCA9685 --break-system-packages
pip install adafruit-circuitpython-motor --break-system-packages
'''# 引入i2c
i2c = busio.I2C(SCL, SDA)
pca = PCA9685(i2c, address=0x40) # 地址可以修改 默认0x40
pca.frequency = 50# 用于存储最后转动到的角度
last_angle = 0def duoji_zx(channel_num, start_angle, end_angle, speed):'''舵机正向旋转控制:0度到180度,如果是360度的舵机也可以:param channel_num: 舵机编号:param start_angle: 舵机转动 开始角度:param end_angle: 舵机转动 结束角度:param speed: 转动的速度,秒为单位:return:'''servo_o = servo.Servo(pca.channels[channel_num])# 设置脉冲宽度 500到2500是正常的 这个可以自己调整 不设置默认只到135度servo_o.set_pulse_width_range(min_pulse=500, max_pulse=2500)for angle in range(start_angle, end_angle):# print(angle)global last_anglelast_angle=angleservo_o.angle = angletime.sleep(speed)def duoji_fx(channel_num, start_angle, end_angle, speed):'''舵机正向旋转控制:0度到180度,如果是360度的舵机也可以:param channel_num: 舵机编号:param start_angle: 舵机转动 开始角度:param end_angle: 舵机转动 结束角度:param speed: 转动的速度,秒为单位:return:'''servo_o = servo.Servo(pca.channels[channel_num])# 设置脉冲宽度 500到2500是正常的 这个可以自己调整 不设置默认只到135度servo_o.set_pulse_width_range(min_pulse=500, max_pulse=2500)# servo_o.angle = 0 # 转动前,先重置为0for angle in range(start_angle, end_angle, -1):# 先0度# print(angle)global last_anglelast_angle = angleservo_o.angle = angletime.sleep(speed)'''
测试通过变量存储舵机当前角度,方便下次转动舵机时从当前角度的基础上进行转动
'''
servo_o = servo.Servo(pca.channels[0])
servo_o.angle = 0 # 每次启动脚本时,先将舵机角度重置为0while True:print("---当前舵机角度为:",last_angle)msg1=input("请选择:低头(1) 抬头(2) 结束(3) :")if int(msg1)==1:msg2=input("请输入要转动的角度:")duoji_zx(0,last_angle,int(msg2),0.03)elif int(msg1)==2:msg2 = input("请输入要转动的角度:")duoji_fx(0, last_angle, int(msg2), 0.03)elif int(msg1)==3:servo_o.angle = 0pca.deinit()print("-----------结束任务")break
运行效果: