Отображение изображения перед событием в микропифоне - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь использовать BBC: Microbit для отображения вспышки в течение 1 секунды на светодиодном индикаторе при нажатии кнопки a.Это работает, но я хочу, чтобы он отображал анимацию (в режиме ожидания), пока он ожидает нажатия кнопки.Приведенный ниже код показывает только изображение в режиме ожидания и не выполняет остальную часть кода при нажатии кнопки a.Что я не так понял?Спасибо.

from microbit import *

standby1 = Image("00000:"
             "00000:"
             "90000:"
             "00000:"
             "00000")

standby2 = Image("00000:"
             "00000:"
             "09000:"
             "00000:"
             "00000")

standby3 = Image("00000:"
             "00000:"
             "00900:"
             "00000:"
             "00000")

standby4 = Image("00000:"
             "00000:"
             "00090:"
             "00000:"
             "00000")

standby5 = Image("00000:"
             "00000:"
             "00009:"
             "00000:"
             "00000")

all_leds_on = Image("99999:"
             "99999:"
             "99999:"
             "99999:"
             "99999")

standby = [standby1, standby2, standby3, standby4, standby5, standby4, standby3, standby2]

display.show(standby, loop=True, delay=100)#Show standby LEDS on a loop

#Wait for button a to be pressed
while True:

    if button_a.was_pressed():
        sleep(1000)#pause program for 1 second
        display.show(all_leds_on) #Turn on LEDS for 1 second
        sleep(1000)#pause program for 1 second
        display.clear()

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Как сказал nekomatic, замена loop = True - это решение. Пожалуйста, найдите пример кода ниже.

Обработчики событий были бы более понятным способом обработки нажатий кнопок. В реализации микропифона на микробите отсутствуют обработчики событий, которые есть, например, в полной реализации микропитона. на досках есть. Обработчики событий доступны в компиляторах Си, доступных для микробита.

from microbit import *

standby1 = Image("00000:"
             "00000:"
             "90000:"
             "00000:"
             "00000")

standby2 = Image("00000:"
             "00000:"
             "09000:"
             "00000:"
             "00000")

standby3 = Image("00000:"
             "00000:"
             "00900:"
             "00000:"
             "00000")

standby4 = Image("00000:"
             "00000:"
             "00090:"
             "00000:"
             "00000")

standby5 = Image("00000:"
             "00000:"
             "00009:"
             "00000:"
             "00000")

all_leds_on = Image("99999:"
             "99999:"
             "99999:"
             "99999:"
             "99999")

def flash_all():
    ''' Flash all LEDs on the display. '''
    display.show(all_leds_on)
    sleep(1000)
    display.clear()

standby = [standby1, standby2, standby3, standby4, standby5, 
        standby4, standby3, standby2]

while True:
    for image in standby:
        if button_a.was_pressed():
            flash_all()
        display.show(image)
        sleep(100)
0 голосов
/ 03 января 2019

Документация для microbit.display.show гласит:

Если loop равно True, анимация будет повторяться вечно.

Таким образом, вместо использования loop=True, вам нужно написать собственный цикл Python for или while, который показывает один кадр из вашей анимации, проверяет, нажата ли кнопка, и выходит из цикла, если она есть.

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

...