Seite 1 von 1

if-Bedingung dauernd prüfen lassen

Verfasst: Sonntag 29. April 2018, 11:15
von TheLüddy
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

Re: if-Bedingung dauernd prüfen lassen

Verfasst: Sonntag 29. April 2018, 11:34
von __deets__
Ja, bitte reich deinen Code nach.

Re: if-Bedingung dauernd prüfen lassen

Verfasst: Sonntag 29. April 2018, 12:08
von TheLüddy

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