#python #raspberry-pi #gpiozero
#python #raspberry-pi #gpiozero
Вопрос:
В настоящее время я программирую то, что можно описать как 1-мерную игру в понг со светодиодами, используя Raspberry pi. Я пытаюсь выполнить это, используя библиотеку gpiozero. Я хочу реализовать что-то, когда после включения светодиода я запускаю таймер, и если кнопка не нажата до указанного таймера, она выходит из цикла.
Я хотел бы сделать что-то вроде:
while True:
led.on()
if button.value != 1 (in t seconds):
break
led.off()
но я понятия не имею, как реализовать (за t секунд). Важно, чтобы я мог контролировать, что происходит во время тайм-аута, потому что я планирую, чтобы он вызывал функцию, которая определяет победителя.
РЕШЕНИЕ: я подумал, что есть способ определить, горит ли светодиод, поэтому я просто сделал
while led.value == 1:
if button.press == 1:
press = 1
if press ==1:
continue
else:
break
Комментарии:
1. Это зависит от точного поведения, которое вы хотите, но вы могли бы просто использовать
time.time
, чтобы сохранить время начала перед циклом, затем проверитьtime.time
в цикле и прервать, если разница больше, чемt
. Однако это означало бы использование ожидания занятости, что неэффективно. Если у вас есть доступasyncio
, я полагаю, у него тоже есть механизмы тайм-аута.
Ответ №1:
Вы можете использовать time.time()
так:
import time
start = time.time()
tseconds = 2
while True:
print("led.on")
now = time.time()
# if button.value != 1.. your conditions
if not now - start > tseconds:
print(now - start)
else:
break
print("lead.off")
Комментарии:
1. Это не совсем работает, потому что он проверяет значение кнопки только при ее вызове, что означает, что если кнопка нажата и отпущена до окончания таймера, она не будет регистрироваться, что приведет к действительно узкому окну, предполагающему, что вы не просто удерживаете кнопку.