if-Bedingung dauernd prüfen lassen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
TheLüddy
User
Beiträge: 20
Registriert: Freitag 27. April 2018, 10:17

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
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja, bitte reich deinen Code nach.
TheLüddy
User
Beiträge: 20
Registriert: Freitag 27. April 2018, 10:17

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()
Antworten