ich derzeit haben 2 Tasten meiner Raspberry Pi angeschlossen (das sind die, die mit dem Ring in ihnen LEDs) und ich versuche, diesen CodePython Tastenfunktionen tun seltsam nicht gleich
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(17, GPIO.OUT) #green LED
GPIO.setup(18, GPIO.OUT) #red LED
GPIO.setup(4, GPIO.IN, GPIO.PUD_UP) #green button
GPIO.setup(27, GPIO.IN, GPIO.PUD_UP) #red button
def remove_events():
GPIO.remove_event_detect(4)
GPIO.remove_event_detect(27)
def add_events():
GPIO.add_event_detect(4, GPIO.FALLING, callback=green, bouncetime=800)
GPIO.add_event_detect(27, GPIO.FALLING, callback=red, bouncetime=800)
def red(pin):
remove_events()
GPIO.output(17, GPIO.LOW)
print "red pushed"
time.sleep(2)
GPIO.output(17, GPIO.HIGH)
add_events()
def green(pin):
remove_events()
GPIO.output(18, GPIO.LOW)
print "green pushed"
time.sleep(2)
GPIO.output(18, GPIO.HIGH)
add_events()
def main():
while True:
print "waiting"
time.sleep(0.5)
GPIO.output(17, GPIO.HIGH)
GPIO.output(18, GPIO.HIGH)
GPIO.add_event_detect(4, GPIO.FALLING, callback=green, bouncetime=800)
GPIO.add_event_detect(27, GPIO.FALLING, callback=red, bouncetime=800)
if __name__ == "__main__":
main()
On auszuführen die Oberfläche sieht wie ein ziemlich einfaches Skript aus. Wenn eine Taste drücken erkannt wird:
- die Ereignisse
- Mitteilung drucken
- 2 Sekunden warten, bevor die Ereignisse hinzufügen und drehen die LEDs wieder auf
, die normalerweise funktioniert groß entfernen, wenn Ich drücke den grünen Knopf. Ich habe es mehrmals hintereinander versucht und es funktioniert ohne Fehler. Mit dem Rot funktioniert es jedoch das erste Mal und das zweite Mal gut, aber nachdem es den zweiten roten (Stift-) Zyklus abgeschlossen hat, stoppt das Skript einfach.
In Anbetracht beider Ereignisse sind ziemlich ähnlich, kann ich nicht erklären, warum es am Ende des zweiten roten Knopfes fehlschlägt.
EDIT: Ich habe die Pins von rot und grün jeweils geändert (entweder zu verschiedenen Pins komplett oder tauschen Sie sie aus). Wie auch immer, es ist immer der rote Knopf Code (eigentlich jetzt grüne Taste) verursacht einen Fehler. Es scheint also, es ist nicht ein physikalisches rotes Knopf Problem, noch ein Pin-Problem, dies lässt nur den Code fehlerhaft sein ...
Vielleicht eine der 'GPIO.output' Aufrufe eine Ausnahme ausgelöst und dann' add_events() 'wurde nie wieder aufgerufen? – zvone
Vielen Dank für Ihre Meinung zu diesem Thema. Ich habe außer Klauseln hinzugefügt, aber sie wurden nicht ausgelöst. Sieht so aus als wäre es nicht so. – user5740843
Es würde auch nicht erklären, warum es einmal gut funktioniert, aber immer am Ende des zweiten Zyklus versagt ... – user5740843