pyboard: 使用pyboard 充当USB鼠标,计时器,电源控制,控制伺服驱动器

使用pyboard 充当USB鼠标

pyboard是USB设备,可以配置为充当鼠标,而不是默认的USB闪存驱动器。

首先要编辑boot.py文件以更改USB配置。

# boot.py -- 在启动时允许
# 可以运行任何python,但最好少用。

import machine
import pyb
pyb.country('US') # ISO 3166-1 Alpha-2 code, eg US, GB, DE, AU
#pyb.main('main.py') # 这个以后要运行的脚本
#pyb.usb_mode('VCP+MSC') # 作为串行设备或储存设备
#pyb.usb_mode('VCP+HID') # 作为串行设备和鼠标,,所以我们要取消这个注释

这就告诉pyboard 在启动时将自身配置为VCP( 虚拟COM端口即串行端口)和HID (人机接口设备,就是鼠标)设备

然后重置下,就会识别板子为鼠标。额。。要修改的话就要进入安全模式了。。

在这里插入图片描述
就是反应的有点慢

手动发送鼠标事件

然后我们使用REPL。。。原来那个不行了,就挨个试试吧,最后时COM4好使。。。。为啥呢

>>> hid = pyb.USB_HID()     # 鼠标右移100像素,按钮状态,x方向,y方向,滚动
>>> hid.send((0, 100, 0, 0)) # (button status, x-direction, y-direction, scroll)

>>> import math              
>>> def osc(n, d):         # 左右摇摆
...   for i in range(n):
...     hid.send((0, int(20 * math.sin(i / 10)), 0, 0))
...     pyb.delay(d)
...
>>> osc(100, 50)

hid.send((0,0,0,100))     # 向上滚


>>> for i in range(-10,11):           # 画个圈圈
...     hid.send((0,i,int((100-i*i)**0.5),0))
...     pyb.delay(50)

用加速度传感器做一个鼠标

目前板子是一个鼠标,不能访问文件系统来编辑文件,进入安全模式然后修改就行。

import pyb

switch = pyb.Switch()
accel = pyb.Accel()
hid = pyb.USB_HID()

while not switch():           # 使用USER按钮控制开启,话说这是switch.value()的简写吗
    hid.send((0, accel.x(), accel.y(), 0))
    pyb.delay(20)                        # 挺飘的。。想保持不动还是很难的。。

出了个问题,按下RST后就闪绿灯(重置没成功?),按下USR停止,打开REPL 在ctrl+d 重置一下才会生效。。这是为什么呢。。

恢复正常,在boot.py中把那行注释掉就行

计时器

pyboard有14个计时器,每个计时器都包含一个以用户定义的频率运行的独立计时器。可以将它们设置为特定间隔运行功能,这几个计时器编号1-14,3 保留给内部使用,5/6定时器用于伺服器和ADC/DAC控制。尽量避免这些的使用。

tim= pyd.Timer(4)           # 创建一个计时器对象。
tim
Timer(4)         # tim 就附加到了4号计时器上,但尚未初始化

>>> tim.init(freq=10)        # 初始化为每秒十次触发
>>> tim
Timer(4, prescaler=624, period=13439, mode=UP, div=1) 
# 这个表示此定时器设置为以624+1 分频的外设时钟运行,从0计数到13439,此时触发中断,然后从0开始重写计数。
# 这些数字的设置是为了让计时器以指定频率触发,
# 原频率是84MHz( 通过tim.source_freq()查看),所以就是84MHz / 625/13440 = 10Hz。挺复杂的哈。。。

相关操作

tim.counter()          # 获取计时器的当前值,可以多试几次看看都是不同的数

>>> tim.callback(lambda t:pyb.LED(1).toggle())         # 为计时器增加一个回调函数,到时间就闪一次

>>> tim4 = pyb.Timer(4, freq=1)
>>> tim7 = pyb.Timer(7, freq=2)
>>> tim4.callback(lambda t: pyb.LED(1).toggle())        # 两个一起来
>>> tim7.callback(lambda t: pyb.LED(2).toggle())

# 制作微秒计数器,这在执行需要精确计时的操作时可能很有用。我们使用计时器2,这个是32位计数器。。
>>> micros = pyb.Timer(2, prescaler=83, period=0x3fffffff)   # 周期设置的大一些,可以再返回零之前计数。
# 预分频器设置为83,该定时器的计数为1 MHz。168 MHz / 2 /(83 + 1)= 1MHz

micros.counter(0)             # 先重置为0

>>> start_micros = micros.counter()

... do some stuff ...

>>> end_micros = micros.counter()

电源控制

pyb.wfi() 用于在等待中断等事件时降低功耗。您可以在以下情况下使用它:

while True:
    do_some_processing()
    pyb.wfi()

控制频率使用:pyb.freq:

pyb.freq(30000000) # 设置CPU频率为30MHz

控制伺服驱动器

不就是舵机嘛。。。就是180/360 转来转去的那个。。固定翼、机器人、机械臂、航模等

在线模拟pyboard,,用上了再买吧。。

在这里插入图片描述
pyboard上有4个专用连接点,用于连接业余伺服电机,引脚X1,X2,X3和X4是4个专用伺服信号引脚。这些电动机具有3根导线:地线,电源线和信号线。

伺服器上的接地线通常是颜色最深的,黑色或深棕色。电源线很可能是红色的。伺服器的电源引脚(标为VIN)直接连接到pyboard的输入电源。通过USB供电时,VIN通过5V USB电源线通过二极管供电。连接到USB后,该pyboard可以为至少4个中小型伺服电机供电。如果使用电池为仪表板供电并运行伺服电动机,请确保其不大于6V,因为这是大多数伺服电动机可以承受的最大电压。(某些电动机仅可承受4.8V的电压,因此请检查您使用的是哪种类型。)

>>> servo1 = pyb.Servo(1)             # 创建一个舵机对象,id是1-4,并且对应于引脚X1至X4。
>>>> servo1.angle(45)         # 右转45度,此处的角度以度为单位,视电机而定。
>>>> servo1.angle()                # 由于设置脉冲宽度时的舍入误差,对于某些角度,返回的角度与您设置的角度不完全相同。
45

>>> servo1.angle(50, 1000)    # 第二个参数就是到达所需角度所要的时间,毫秒单位
>>> servo1.angle(-45, 2000); servo2.angle(60, 2000)  # 控制多个电机

连续旋转伺服器

现在我们用的时移动到特定角度并报错该角度的标准伺服器,可以用来创建机器人关键,,电机内部有一个可变电阻器(电位计),该电阻器可测量电流角度,并按与所需角度相差多远的比例向电机施加功率。所需角度由伺服信号线上的高脉冲宽度设置。1500微秒的脉冲宽度对应于中心位置(0度)。脉冲以50 Hz发送,即每秒发送50个脉冲。(人类真是厉害啊。。)

也可以连续旋转,方向和速度又信号线上的脉冲宽度设置,1500微妙的脉冲宽度对应于停止的电机,小于或大于此宽度的脉冲宽度以给定速度单向或双向旋转。

>>> servo1.speed(30)               # 这个比angle更好理解
>>> servo1.speed(0, 2000)              # 两秒停止,其实是对加速度的控制。

校准

伺服对象使用其校准值完成从角度或速度到脉冲宽度的转换。

>>> servo1.calibration()
(640, 2420, 1500, 2470, 2200)

>>> servo1.calibration(700, 2400, 1510, 2500, 2000)       # 更改默认的

最小脉冲宽度 伺服器接受的最小脉冲宽度。

最大脉冲宽度 伺服器接受的最大脉冲宽度。

中心脉冲宽度;使伺服器处于0度或0速度的脉冲宽度。

脉冲宽度对应于90度。这将angle角度转换设置为脉冲宽度。

脉冲宽度对应于速度100。这将speed速度方法中的转换设置为脉冲宽度。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值