Liebe Mitglieder,
ich habe mir letztens mal ein Raspberry model B+ gekauft und dazu noch das Franzis Lernpaket. Mein Problem sieht wie folgt aus:
Ich habe es geschafft (wie im Lernpaket erklärt) eine kleine Ampel in Python zu simulieren. Dabei habe ich 3 LED's verbunden (rot,gelb,grün), die nacheinander aktiv werden, wie eine normale Ampel eben. Nun würde ich dazu noch gerne ein Fussgängerblinklicht dazuprogrammieren, welches logischerweise nur bei rot aktiviert wird und ausserdem nur wenn ich einen Taster kurz gedrückt habe.
Der Farbwechsel der Ampellichter findet in einer while-Schleife statt und läuft ewig. Das Problem ist, dass ich eine if-Bedingung aufstellen wollte, um zu überprüfen ob der Schalter aktiviert wurde, jedoch wird diese nur am Anfang des Programms getestet und dann ignoriert.
Gibt es eine Möglichkeit, eine if bedinung aufzustellen, welche dauernd geprüft wird? Ich hoffe ich habe die Situation genug gut geschildert, wenn nötig reiche ich noch den Code nach.
Vielen Dank,
TheLüddy
if-Bedingung dauernd prüfen lassen
Code: Alles auswählen
import RPi.GPIO as GPIO
import time
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(Ampel[taster], GPIO.IN)
print("Taster drücken für Fussgängerblinklicht, Ctrl+C beendet das Programm")
fussg = False
if GPIO.input(Ampel[taster])==True:
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()