Raspberry Pi мигает светодиодом каждый раз, когда кнопка включена - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть Raspberry Pi, подключенный к тумблерам и светодиодам.Каждый переключатель включает светодиод, а третий включает соответствующий светодиод, а затем мигает еще 20 секунд.В настоящее время сценарий python позволяет вам включать и выключать кнопки столько, сколько вы хотите, но этот последний аргумент выполняется только в первый раз.Как я могу изменить это, чтобы мигать третий светодиод каждый раз при включении GPIO 25?

t_end = time.time() + 20
while(1):

    GPIO.wait_for_edge(23, GPIO.FALLING)
    print ("Phase 1 Initiated")
    sounda.play()

    GPIO.wait_for_edge(24, GPIO.FALLING)
    print ("Phase 2 Initiated")
    soundb.play()

    GPIO.wait_for_edge(25, GPIO.FALLING)
    print ("Phase 3 Initiated")
    soundc.play()
    while time.time() < t_end:
        GPIO.output(6, GPIO.HIGH) 
        sleep(.5)
        GPIO.output(6, GPIO.LOW) 
        sleep(.5) 

1 Ответ

0 голосов
/ 29 сентября 2019

Вы устанавливаете t_end равным time.time() + 20 перед своим внешним циклом while, и никогда не обновляете его после этого, так что через 20 секунд и time.time() станет равным, а затем большим, чем t_end, код в вашем внутреннем while time.time() < t_end цикле while никогда больше не будет выполняться.

Поскольку два оператора sleep(.5) в этом коде

while time.time() < t_end:
    GPIO.output(6, GPIO.HIGH) 
    sleep(.5)
    GPIO.output(6, GPIO.LOW) 
    sleep(.5)  

означают, что каждый цикл мигания занимает одну секунду из-за того, что светодиод включен на полсекунды и выключен на полсекундыпочему бы просто не заменить while time.time() < t_end: на for i in range(20):, и тогда вы получите 20 секунд мигания без необходимости работать с какой-либо дополнительной переменной времени.

...