Можете ли вы использовать события или прерывания с 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)