MicroPython 2.0 beta 5
试图了解电动机上的stalled()
功能如何工作。我以dc为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:电动机运转,则按住它,它会停止。但是我从没有看到报告说它停滞了。
答案 0 :(得分:1)
尽管应用了最大占空比,但仍无法达到目标速度或角度时,电动机仍会失速。
您的示例可以像这样修改:
#!/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()
此示例等效于单线left_motor.run_until_stalled(500)
。如果要将其扩展到多个电机,则手动方法会很有用。
问题中的dc()
方法未设置目标速度或角度;它直接设置占空比,因此没有停顿信息。
注意:从Pybricks版本Pybricks 2.0开始,可以通过left_motor.stalled()
访问left_motor.control.stalled()
方法。它仅在2020年3月才处于公开Beta版,因此我不确定2019年8月原始帖子中报告的版本是否正确。