2016-06-11 7 views
3

Dies ist mein erster Versuch, einen Raspberry Pi und einen Hardware-Druckknopf auf einem Steckbrett zu codieren. Das Programm ist einfach, wenn ein Knopfdruck erkannt wird, schalten Sie eine LED auf dem Steckbrett für 1 Sekunde ein. Mein Code scheint zu funktionieren, aber merkwürdigerweise löst ein Knopfdruck die Callback-Funktion zweimal aus. Ich bin ein totaler Programmier-Noob, also bin ich mir nicht sicher, ob das Problem mit meinem Code ist, oder ob die HW oder der Button irgendwie tatsächlich zweimal fällt. Ich hoffe, dass jemand hier mir helfen kann, diese Fremdheit zu beheben. Hier ist mein Code:Taste GPIO.FALLING-Ereignis wird zweimal ausgelöst

#!/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

Warum schleifen Sie für immer in Schleife? –

+0

Ich brauche meinen Code kontinuierlich zu laufen. Wenn Sie eine bessere Möglichkeit haben, dies zu tun, bin ich glücklich, einen anderen Ansatz zu versuchen. – szaske

+0

Aber sollten Sie nicht auf Ereignisse in der Schleife hören? –

Antwort

1

Ich fand eine Lösung. Mit dem Code here, löste ich mein Problem.

Wenn Sie wie ich sind, und zufällige doppelte Schaltfläche drücken Ereignisse bei der Verwendung von GPIO.add_event_detect, versuchen Sie stattdessen den verknüpften Code.

Verwandte Themen