esp32 摇杆控制二自由度云台

from machine import Pin,ADC,PWM
import time
#定义18 4 引脚为舵机控制PWM,频率50hz,即一个周期0.02s
#初始化占空比让舵机归位
p18=PWM(Pin(18,Pin.OUT),freq=50,duty=26)
p4=PWM(Pin(4,Pin.OUT),freq=50,duty=26)
# 定义摇杆引脚
ps2y=ADC(Pin(33))
ps2x=ADC(Pin(32))
# 设置输出的模拟值在0-4095之间
ps2y.atten(ADC.ATTN_11DB)
ps2x.atten(ADC.ATTN_11DB)
#设置舵机初始角度值为0
anglex=0
angley=0
#限定舵机转动角度为0-180
#舵机在20ms为一个周期内,若高电平时间为0.5ms,则转动方向为0
#有下表: 0.5ms   0°
#         1ms    45°
#         1.5ms  90°
#         2ms    135° 
#         2.5ms    180°
# 从0-180之间有2ms的时间间隔,推出舵机转动1°(angle=1)的占空比公式:
# pw=((angle/180*2000)+500)/20000*65535
#65535与PWM设置的精度有关,esp32默认就是65535

#向左
def move_l():
    # 定义全局变量,方便在函数内修改
    global anglex
    #让舵机转动1°
    anglex += 1
    if anglex > 180:
        anglex = 180
        #括号内的值在0-65535之间,其与65535的比值为占空比
    pw=((anglex/180*2000)+500)/20000*65535
    p4.duty_u16(int(pw))
    
#向右
def move_r():
    # 定义全局变量,方便在函数内修改
    global anglex
    #让舵机相反方向转动1°
    anglex -= 1
    if anglex < 0:
        anglex=0
    pw=((anglex/180*2000)+500)/20000*65535
    p4.duty_u16(int(pw))
    
#向上
def move_u():
    # 定义全局变量,方便在函数内修改
    global angley
    #让舵机转动1°
    angley += 1
    if angley > 180:
        angley=0
    pw=((angley/180*2000)+500)/20000*65535
    p18.duty_u16(int(pw))

#向右
def move_d():
    # 定义全局变量,方便在函数内修改
    global angley
    #让舵机相反方向转动1°
    angley -= 1
    if angley < 0:
        angley=0
    pw=((angley/180*2000)+500)/20000*65535
    p18.duty_u16(int(pw))

while True:
    #用选择语句对摇杆的方向进行判断
    if ps2y.read()<1600:
        move_l()
    elif ps2y.read()>2000:
        move_r()
    if ps2x.read()<1600:
        move_u()
    elif ps2x.read()>2000:
        move_d()
    #调节摇杆灵敏度
    time.sleep_ms(10)

接线图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值