首页 > 解决方案 > 在 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:电机运行,我握住它,它停止。但我从来没有看到有报道说它停滞不前。

标签: micropythonmindstormsev3pybricks-micropython

解决方案


尽管应用了最大占空比,当电机无法达到其目标速度或角度时,它就会停止。

您的示例可以这样调整:

#!/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 月原始帖子中报告的版本是否正确。


推荐阅读