micropython - 在 Pybricks-MicroPython 中,stalled() 函数是如何工作的
问题描述
MicroPython 2.0 测试版 5
试图了解stalled()
电机上的功能是如何工作的。我以 100 的直流电运行电机,并握住车轮使其无法移动。
但是该stalled
函数不会触发,实际上无论我做什么我似乎都无法让它返回 True?
我尝试用更少的功率,但仍然无法从这个功能中得到任何东西。
#!/usr/bin/env pybricks-micropython
from pybricks import ev3brick as brick
from pybricks.ev3devices import Motor
from pybricks.parameters import Port, Stop
left_motor = Motor(Port.B)
speed = 800
# option 1
left_motor.dc(100)
# option 2
#left_motor.run_until_stalled(speed, Stop.HOLD, 100)
while True:
if left_motor.stalled():
print("stalled")
如果我使用选项 1:电机运行,我会一直按住它直到它停止,没有任何报告。我放手,它又走了。
如果我使用选项 2:电机运行,我握住它,它停止。但我从来没有看到有报道说它停滞不前。
解决方案
尽管应用了最大占空比,当电机无法达到其目标速度或角度时,它就会停止。
您的示例可以这样调整:
#!/usr/bin/env pybricks-micropython
from pybricks.ev3devices import Motor
from pybricks.parameters import Port
from pybricks.tools import wait
# Initialize the motor
left_motor = Motor(Port.B)
# Start running the motor at 500 deg/s
left_motor.run(500)
# Do nothing until we are stalled
while not left_motor.stalled():
wait(10)
# Stop the motor
left_motor.stop()
这个例子相当于 one-liner left_motor.run_until_stalled(500)
。如果您想将其扩展到多个电机,手动方法会很有用。
问题中的dc()
方法没有设定目标速度或角度;它直接设置占空比,因此没有停顿信息。
注意:该left_motor.stalled()
方法可以通过left_motor.control.stalled()
Pybricks 版本 Pybricks 2.0 访问。它仅在 2020 年 3 月处于公开测试阶段,因此我不确定 2019 年 8 月原始帖子中报告的版本是否正确。
推荐阅读
- angular - 添加 Stripe 后 Angular Karma 测试失败
- django - 在 Django 模板中访问查询集的“values_list”
- java - mybatis+oracle,程序卡在插入
- jquery - jQuery:如何在 Ajax 调用中更新 cookie 后刷新从 cookie 中读取的数据
- angular - NGINX 根据位置 URL 提供角度和反应捆绑文件?
- python - 在 PySide2 中设置垂直和水平对齐
- c++ - ./a.out 结果 '.' 未被识别为内部或外部命令、可运行程序或批处理文件
- javascript - 使用带有 Websockets 的 JavaScript MQTT 客户端连接到 MQTT 代理时出错
- amazon-web-services - terraform db 实例和 ec2 安全组位于不同的 vpc 中
- reactjs - 使用 React 的内联 CSS 样式块