У меня есть Raspberry Pi с Raspbian через NOOBS. У меня есть кнопка, подключенная к контактам 1 и 11. Я пытаюсь использовать GPIO .add_event_detect и RPIO.RISING для вызова функции при нажатии кнопки. (Обратный вызов включает светодиод на 2 секунды, а затем выключает его.)
Я обнаружил, что функция RPIO.RISING вызывает обратный вызов как при нажатии кнопки (контакт 11 переходит от 0 до 1), так и при отпускании кнопки (контакт 11 переходит от 1 до 0). Свет включается дважды, точно так же, как если бы я использовал RPIO.BOTH.
Я не думаю, что это проблема гистерезиса/зашумленного сигнала, потому что я могу нажать кнопку на много секунд, а затем отпустить и снова увидеть вызов обратного вызова.
Вот пример кода:
import RPi.GPIO as GPIO ## Import GPIO library
import time
#configure all of the inputs / outputs properly
def config():
#initalize the GPIO pin numbering
GPIO.setmode(GPIO.BOARD) ## Use board pin numbering
#setup output pins
GPIO.setup(8, GPIO.OUT) ## Setup GPIO Pin 7 to OUT
GPIO.setup(10,GPIO.OUT)
GPIO.setup(12,GPIO.OUT)
#initialize the inputs for the button
GPIO.setup(11, GPIO.IN)
#create the button-watching function
GPIO.add_event_detect(11, GPIO.RISING, callback=execute_lights, bouncetime=800)
#the light-turning-on function. One press turns yellow. Second press turns green, then off.
def execute_lights(channel):
print "executing lights: "
#Turn on the light we want
GPIO.output(8,True)
#turn green off after 2 seconds
time.sleep(2)
GPIO.output(8,False)
Есть ли программный обходной путь, который я могу использовать для решения этой проблемы?