我正在尝试为 LEGO Mindstorms EV3 积木编写一个程序,该程序需要在传感器记录特定输入时采取行动。据我所知,在 EV3 micropython / pybricks 中执行此操作的唯一方法是忙于等待。这限制了在传感器检查时处理其他信息的能力,因为砖似乎不支持多线程。
然而,EV3 Classroom 模块编程似乎支持使用事件。
这也可以使用 pybricks 中的事件来完成吗?
我正在尝试为 LEGO Mindstorms EV3 积木编写一个程序,该程序需要在传感器记录特定输入时采取行动。据我所知,在 EV3 micropython / pybricks 中执行此操作的唯一方法是忙于等待。这限制了在传感器检查时处理其他信息的能力,因为砖似乎不支持多线程。
然而,EV3 Classroom 模块编程似乎支持使用事件。
这也可以使用 pybricks 中的事件来完成吗?
您可以使用threading
模块在 pybricks 中使用多线程。我用它来为触摸传感器创建事件,我没有测试它,这是一个旧代码,在我写完之后我意识到我不需要它。但这里是代码:
Thread(target=self.listenForButtonClick).start()
def onButtonClick(self, func):
"""
Add a function to be called when a button is clicked on the EV3 Brick.
:param func: the function to be called.
"""
self.buttonClick.append(func)
def listenForButtonClick(self):
"""
Listen for button clicks on the EV3 Brick.
"""
while True:
if any(self.buttons.pressed()):
for func in self.buttonClick:
func(self.buttons.pressed())
wait(50)
示例用法:
def click(args):
print(args)
# Do Stuff
onButtonClick(click)