2016-06-11 312 views
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() 
+0

爲什麼你永遠循環循環? –

+0

我需要我的代碼連續運行。如果你有更好的方法來做到這一點,我很樂意嘗試另一種方法.. – szaske

+0

但是,你應該不是在聽循環中的事件嗎? –

回答

1

我找到了一個解決方案。使用代碼here解決了我的問題。

如果您和我一樣,並且在使用GPIO.add_event_detect時獲得隨機重複按鈕按下事件,請嘗試使用鏈接代碼。