У меня есть часть кода, которая делает именно то, что мне нужно, за исключением одной вещи, таймаута.Тайм-аут while Loop If No Input
В принципе, этот код регистрирует запись каждые 0,5 с в течение 3 секунд, а затем печатает «Готово» и затем перезапускается. Звук, который я пытаюсь записать, является постоянным в течение примерно 3,1 с, так что это идеально. Каждый раз, когда звук присутствует, он печатает «Готово».
import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BOARD)
pin = 7 #Defining pin 7 as Input pin
GPIO.setup(pin, GPIO.IN)
list = ["Start"]
while l:
if GPIO.input(pin) == GPIO.LOW: #This is the input
if len(list) <= 6:
list.insert(0, "Entry") #Insert into list at first position
sleep(0.5) #If there is a constant sound, this makes sure a new item is interted only every 0,5s.
print ("Not Done")
print (len(list))
elif len(list) > 6:
list = ["Start"]
print ("Done")
Так что теперь, я хочу код, чтобы перезагрузить, если сказать, что обнаруживает звук и регистрирует его, но ничего не происходит в течение 1 или 2 секунд.
Так что, если список доходит до 3 или 4 единиц в длину, но тогда ничего не происходит на секунду или два, он должен вернуться к тому, чтобы быть единым целым.
Надеюсь, это имеет смысл. И я надеюсь, что вы все можете мне помочь.
Большое спасибо!
Спасибо @Chad Миллер. - Кажется, он работает только для печати «Не сделано» - я не могу заставить его печатать «Готово». Когда я впервые запускал код, он сказал мне, что «порог» не определен. Поэтому мне пришлось изменить «logging_threshold» на «порог», чтобы он работал. Есть ли у вас какие-либо предложения? Есть ли модуль, который я не импортирую? – LukeVenter
@ LukeVenter, это просто, что ваша логика ошибочна. Пройдите через это вручную. Не запускайте его. Убедитесь, что вы понимаете, с ручкой и бумагой, что происходит. Нарисуйте поле с именами переменных. Используйте монету или кости, чтобы решить, что возвращает GPIO.input (pin). Напишите историю, убедитесь, что она делает то, что вы ожидаете. –