Можете ли вы использовать события или прерывания с EV3 micropython?

Я пытаюсь написать программу для кубика LEGO Mindstorms EV3, которая требует, чтобы действия выполнялись, когда датчики регистрируют определенный входной сигнал. Насколько я могу судить, единственный способ сделать это в EV3 micropython / pybricks - это ожидание занятости. Это ограничивает возможность обработки другой информации во время проверки датчиков, поскольку блок, по-видимому, не поддерживает многопоточность.

Однако кажется, что блочное программирование EV3 Classroom поддерживает использование событий.

Можно ли это сделать и с помощью событий в pybricks?

1 ответ

Вы можете использовать многопоточность в pybricks, используя threadingмодуль. Я использовал это для создания событий для сенсорного датчика, я его не тестировал, это старый код, который после того, как я его написал, понял, что он мне не нужен. Но вот код:

      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)
Другие вопросы по тегам