Ich habe in einer endlos while Schlaufe eine Ampel programmiert, welche von grün auf rot schaltet und wieder zurück. Weiterhin möchte ich jetzt einen Taster dazu addieren, welcher, sobald er zu irgendeiner Zeit gedrückt wird, eine zusätzliche blaue LED zum blinken bringt während die Ampel auf rot gestellt ist. Um dauernd zu überpfrüfen ob der Taster gedrückt wurde, wollte ich dies in einem zweiten Thread implementieren. Da ich aber ein Python- bzw Programmieranfänger bin, ist mir wohl ein Fehler unterlaufen. Nun bräuchte ich Hilfe um den Code auszubessern.
Vielen Dank im Voraus!
Code: Alles auswählen
import RPi.GPIO as GPIO
import time
import _thread
GPIO.setmode(GPIO.BCM)
rot = 0; gelb = 1; gruen = 2; blau = 3; taster = 4
Ampel=[4,18,23,24,25]
GPIO.setup(Ampel[rot], GPIO.OUT, initial = False)
GPIO.setup(Ampel[gelb], GPIO.OUT, initial = False)
GPIO.setup(Ampel[gruen], GPIO.OUT, initial = True)
GPIO.setup(Ampel[blau], GPIO.OUT, initial = False)
GPIO.setup(25, GPIO.IN)
print("Taster drücken für Fussgängerblinklicht, Ctrl+C beendet das Programm")
fussg = False
def taste():
GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.IN)
while True:
if GPIO.input(25) == 1:
fussg = True
try:
while True:
if fussg == True:
GPIO.output(Ampel[gruen], False)
GPIO.output(Ampel[gelb], True)
time.sleep(1)
GPIO.output(Ampel[gelb], False)
GPIO.output(Ampel[rot], True)
time.sleep(0.6)
for i in range(10):
GPIO.output(Ampel[blau], True); time.sleep(0.05)
GPIO.output(Ampel[blau], False); time.sleep(0.05)
time.sleep(0.6)
GPIO.output(Ampel[rot], False)
GPIO.output(Ampel[gelb], False)
GPIO.output(Ampel[gruen], True)
time.sleep(3)
fussg = False
else:
time.sleep(3)
GPIO.output(Ampel[gruen], False)
GPIO.output(Ampel[gelb], True)
time.sleep(1)
GPIO.output(Ampel[gelb], False)
GPIO.output(Ampel[rot], True)
time.sleep(2)
GPIO.output(Ampel[gelb], True)
time.sleep(0.6)
GPIO.output(Ampel[rot], False)
GPIO.output(Ampel[gelb], False)
GPIO.output(Ampel[gruen], True)
except KeyboardInterrupt:
GPIO.cleanup()
_thread.start_new_thread(taste, ())