Aha oke.
Generell ist es schon mal besser mit Interrupts zu arbeiten, das schont die CPU Auslastung und sorgt auch dafür fast kein trigger Event zu verpassen (in der Zeit wo das Script mit sleep blockiert wird kann auf nichts reagiert werden)
Der callback vom gpio event übergibt nur den Pin des GPIO von wo der event ausgelöst wurde. Den kannst du so wie in Beitrag#15 also nicht nutzen.
Auch solltest du im callback mit if..elif.. usw arbeiten das machts schneller, weil wenn eins zutrifft muss das andere nicht auch noch geprüft werden.
Der callback wird immer wieder aufgerufen sobald ein event auftritt, also ein RISING gpio passiert. Das läuft im Hintergrund in einem Thread. Das Script selbst beendet sich aber sobald es von oben nach unten abgearbeitet wurde und beendet dann auch den Interrupt Thread. Deshalb sollte man hier das Script daran hindern sich zu beenden. Da habe ich mir angewöhnt signal anstatt einer while Schleife zu verwenden.
Und wenn es beendet wurde sollte man auch GPIO.cleanup() aufrufen damit die eingestellten GPIO's wieder auf Werkszustand zurückgesetzt werden (und beim nächsten Scriptstart keine Warnings mehr ausgegeben werden)
Versuch es mal hiermit:
[code=php]
#!/usr/bin/python
import RPi.GPIO as GPIO
import signal
Taster1 = 4
Taster2 = 17
auswahl = ["Menupunkt 0", "Menupunkt 1", "Menupunkt 2", "Beenden"]
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(Taster1, GPIO.IN)
GPIO.setup(Taster2, GPIO.IN)
Counter = 0
def menueAuswahl(pin):
global Counter
Counter = (Counter + 1) % 4
#print("Rising edge detected on %s" % pin)
if Counter == 0:
print(auswahl[Counter])
elif Counter == 1:
print(auswahl[Counter])
elif Counter == 2:
print(auswahl[Counter])
elif Counter == 3:
print(auswahl[Counter])
def menueAendern(pin):
#print("Rising edge detected on %s" % pin)
print("Menüwechsel nach: %s" % auswahl[Counter])
try:
GPIO.add_event_detect(Taster1, GPIO.RISING, callback=menueAuswahl, bouncetime=200)
GPIO.add_event_detect(Taster2, GPIO.RISING, callback=menueAendern, bouncetime=200)
signal.pause()
except KeyboardInterrupt:
print("\nQuit\n")
GPIO.cleanup()
[/php]
Drückst du jetzt 2x auf Taster1 gibt er dir über menueAuswahl -> Menupunkt 1 aus.
Drückst du dann auf Taster2 sollte er über menueAendern ausgeben: Menüwechsel nach: Menupunkt 1
Später kann man sich diese ganzen if...elif in menueAuswahl aber eigentlich auch schenken sofern da nicht noch was anderes ausgeführt werden soll, Hauptsache er zählt den Counter hoch