Я пытаюсь определить, когда кнопка нажата и как долго. Я хочу использовать кнопку для "следующего" шага, инициированного пользователем, и если кнопка удерживается в течение трех секунд, я завершу программу. Однако wait_for_edge выдает ошибку времени выполнения: конфликтные события обнаружения фронта уже существуют для этого канала GPIO.
Есть ли лучшее решение? TIA, Стив
Вот код
#!/usr/bin/env python2.7
import sys
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_UP)
def myInterrupt(channel):
global buttonStatus
start_time = time.time()
GPIO.wait_for_edge(channel, GPIO.RISING)
buttonStatus = time.time() - start_time
# Setup the interrupt call when pin 26 goes low
GPIO.add_event_detect(26, GPIO.FALLING, callback=myInterrupt, bouncetime=300)
try:
quit = False
buttonStatus = 0
while not quit:
# Do stuff here, waiting for an interrupt.
sys.stdout.write("\r{}".format(time.ctime()))
sys.stdout.flush()
time.sleep(1)
# Did the button get pressed?
if buttonStatus != 0:
# Button was pressed.
buttonStatus = 0
print
print "Button pressed for {} seconds".format(buttonStatus)
except KeyboardInterrupt:
GPIO.cleanup() # clean up GPIO on CTRL+C exit
GPIO.cleanup() # clean up GPIO on normal exit
print
