Я пытаюсь определить, когда кнопка нажата и как долго. Я хочу использовать кнопку для "следующего" шага, инициированного пользователем, и если кнопка удерживается в течение трех секунд, я завершу программу. Однако 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