Blinkende LED

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
felline
User
Beiträge: 4
Registriert: Samstag 12. Oktober 2019, 16:50

in meinem RFID-Projekt möchte ich folgendes über eine RGB-LED realisieren:

1. Im Wartezustand soll sie dauerhaft rot leuchten.
2. Wird ein "gültiger" Tag aufgelegt, dann soll eine LED 10 Sekunden lang leuchten. Danach wieder Wechsel auf rot.
3. Wird ein nicht autorisierter Tag aufgelegt, dann soll die LED für 5 Sekunden abwechselnd rot - grün - rot - grün blinken.

die Lösung zu 1. ist trivial.

die Lösung zu 2. ist auch einfach gewesen

die Lösung zu 3. macht mir Probleme. Hier hatte ich folgendes vor:

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(13,GPIO.OUT) # gruene LED
GPIO.setup(15,GPIO.OUT) # rote LED

count = 0
while (count < 10):
count = count + 1
GPIO.output(15,True) # rot an
GPIO.output(13,False) # gruen aus
time.sleep(0.25)
GPIO.output(15,False) # gruen an
GPIO.output(13,True) # rot aus
time.sleep(0.25)

Irgendwie tut das aber nicht. Grüb bleibt immer an. und dass etwas blinkt kann ich auch nicht erkennen. Als ob da gar nichts wäre.

Wer hat da eine Lösung?

Danke

felline
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Der Code läuft *gar nicht* weil er Einrückungsfehler enthält. Bitte zeige den tatsächlichen Code und bitte auch in Code-Tags, damit man den auch mit Einrückung lesen kann ohne die Zitatfunktion zu bemühen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@felline: Weitere Anmerkungen: ``as`` bei Importen ist dazu da etwas umzubenennen. Das passiert bei `GPIO` aber gar nicht.

Man sollte beim `GPIO`-Modul immer sicherstellen, dass vor dem Programmenede die `cleanup()`-Funktion aufgerufen wird.

Statt der ganzen rot/grün-Kommentare um die ”magischen” Zahlen zu erklären, sollte man aussagekräftige Konstanten für die Pin-Nummern definieren.

Die Klammern um die ``while``-Bedingung sind überflüssig.

Wenn man weiss wie oft man die Schleife wiederholen will ist das auch keine ``while``-Schleife sondern ein Fall für eine ``for``-Schleife.

Ungetestet:

Code: Alles auswählen

#!/usr/bin/env python3
import time

from RPi import GPIO

GREEN_LED_PIN = 13
RED_LED_PIN = 15


def main():
    try:
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(GREEN_LED_PIN, GPIO.OUT)
        GPIO.setup(RED_LED_PIN, GPIO.OUT)

        for _ in range(10):
            GPIO.output(RED_LED_PIN, True)
            GPIO.output(GREEN_LED_PIN, False)
            time.sleep(0.25)
            GPIO.output(RED_LED_PIN, False)
            GPIO.output(GREEN_LED_PIN, True)
            time.sleep(0.25)
    finally:
        GPIO.cleanup()


if __name__ == "__main__":
    main()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten