0

我正在尝试为 LEGO Mindstorms EV3 积木编写一个程序,该程序需要在传感器记录特定输入时采取行动。据我所知,在 EV3 micropython / pybricks 中执行此操作的唯一方法是忙于等待。这限制了在传感器检查时处理其他信息的能力,因为砖似乎不支持多线程。

然而,EV3 Classroom 模块编程似乎支持使用事件。

这也可以使用 pybricks 中的事件来完成吗?

4

1 回答 1

0

您可以使用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)
于 2021-12-22T08:10:57.217 回答