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()
Warum schleifen Sie für immer in Schleife? –
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
Aber sollten Sie nicht auf Ereignisse in der Schleife hören? –