Время ожидания в Python

#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. Это не совсем работает, потому что он проверяет значение кнопки только при ее вызове, что означает, что если кнопка нажата и отпущена до окончания таймера, она не будет регистрироваться, что приведет к действительно узкому окну, предполагающему, что вы не просто удерживаете кнопку.