3
這是我第一次嘗試在麪包板上編碼Raspberry Pi和硬件按鈕。該程序很簡單,當檢測到按鈕按下時,打開面包板上的LED 1秒鐘。我的代碼似乎工作,但奇怪的是每經常一個按鈕推動觸發回調函數兩次。我是一個總編程noob,所以我不確定問題是否與我的代碼,或者如果硬件或按鈕實際上下降兩次。我希望這裏有人能幫我解決這種奇怪的問題。這裏是我的代碼:按鈕GPIO.FALLING事件觸發兩次
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
LedPin = 11 # pin11 --- led
BtnPin = 12 # pin12 --- button
def setup():
GPIO.setmode(GPIO.BOARD) # Numbers GPIOs by physical location
GPIO.setup(LedPin, GPIO.OUT) # Set LedPin's mode is output
GPIO.setup(BtnPin, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Set BtnPin's mode is input, and pull up to high level(3.3V)
GPIO.output(LedPin, GPIO.HIGH) # Set LedPin high(+3.3V) to off led
def Light(ev=None):
print 'A button press was detected'
GPIO.output(LedPin, 0) # switch led status on
time.sleep(1)
GPIO.output(LedPin, 1) # switch led status off
def loop():
GPIO.add_event_detect(BtnPin, GPIO.FALLING, callback=Light) # wait for Button Press (GPIO Falling)
while True:
pass # Don't do anything, sit forever
def destroy():
GPIO.output(LedPin, GPIO.HIGH) # led off
GPIO.cleanup() # Release resource
if __name__ == '__main__': # Program start from here
setup()
try:
loop()
except KeyboardInterrupt: # When 'Ctrl+C' is pressed, the child program destroy() will be executed.
destroy()
爲什麼你永遠循環循環? –
我需要我的代碼連續運行。如果你有更好的方法來做到這一點,我很樂意嘗試另一種方法.. – szaske
但是,你應該不是在聽循環中的事件嗎? –