Seite 1 von 1

Mehrere LED`s ansteuern

Verfasst: Sonntag 21. August 2022, 16:17
von Nasenbär77
Hallihallo,

Ich bin gerade dabei animierte Sequenzen über eine selbstgebaute LED Matrix ab zu spielen.
Hierzu habe ich einen LED Strip in 10 x 15 Dots augeteilt und versuche diese über pytoh mit Leben zu befüllen.
Ich gehe hier über einzelne Programm-Teile, die ich danach zusammen setze:

Code: Alles auswählen

def water(): # Wellenbewegung
    strip = Adafruit_NeoPixel(TOTAL_LED_COUNT, LED_STRIP_PIN, dma=5)
    GPIO.setmode(GPIO.BCM)
    strip.begin()
    for leds, duration in LED_PROGRAM_WATER:
        for led, color in leds:
            strip.setPixelColor(led, color)
        strip.show()
        time.sleep(duration)
Nun ists allerdings relativ anstrengend immer JEDE einzelne LED bei einer Animation in die Zeilen zu schreiben. Deshalb meine Frage:

Kann ich im Programm LED`s in folgender Zeile Zusammenfassen (z.B. LED 140 - 149)?:

Code: Alles auswählen

    ([(140, BLACK), (141, BLACK), (142, BLACK), (143, BLACK), (144, BLACK), (145, BLACK), (146, BLACK), (147, BLACK), (148, BLACK), (149, BLACK), (130, BLACK), (131, BLACK), (132, BLACK), (133, BLACK), (134, BLACK), (135, BLACK), (136, BLACK), (137, BLACK), (138, BLACK), (139, BLACK), (120, BLACK), (121, BLACK), (124, BLACK), (125, BLACK), (126, BLACK), (129, BLACK), (114, BLACK), (119, BLACK),], 0.1),
Danke schonmal für die Antworten und einen schönen Sonntag :)

Chris

Re: Mehrere LED`s ansteuern

Verfasst: Sonntag 21. August 2022, 20:24
von Sirius3
So ein "Zusammenfassen" mußt Du halt programmieren, indem Du zum Beispiel statt einer Zahl für die LED ein iterierbares Objekt speicherst, z.B. range(140,150) und das dann in der for-Schleife berücksichtigst.

Re: Mehrere LED`s ansteuern

Verfasst: Montag 22. August 2022, 09:59
von __blackjack__
@Nasenbär77: Das klingt jetzt so als würdest Du die Funktion mehrfach kopieren, umbenennen und die Konstante anpassen in der das ”LED-Programm” steht. Gewöhn Dir so etwas gar nicht erst an. Als Programmierer vermeidet man das wiederholen von Code und Daten. Und gerade Funktionen sind ein Mittel um das zu tun.

*Eine* Funktion, die verschiedene ”LED-Programme” abspielen kann, könnte so aussehen:

Code: Alles auswählen

def play_animation(strip, steps):
    for leds, duration in steps:
        for led, color in leds:
            strip.setPixelColor(led, color)
        strip.show()
        time.sleep(duration)
Aufruf dann mit:

Code: Alles auswählen

def main():
    GPIO.setmode(GPIO.BCM)
    strip = Adafruit_NeoPixel(TOTAL_LED_COUNT, LED_STRIP_PIN, dma=5)
    strip.begin()
    play_animation(strip, LED_PROGRAM_WATER)
    play_animation(strip, LED_PROGRAM_FIRE)
Wobei mir persönlich das erstellen von Animationen auf diese Art für 150 Pixel zu umständlich wäre. Da würde man eher schauen, dass man das mit einem Grafikprogramm macht, beispielsweise als GIF und dann Code schreiben, der das GIF lädt und abspielt.

Re: Mehrere LED`s ansteuern

Verfasst: Donnerstag 25. August 2022, 21:48
von Dennis89
Hallo,

ich finde die Idee mit GIF interessant und habe mal etwas gegooglt. Auslesen könnte man die Datei dann mit imageio. Oder gibt es was sinnvolleres?

Grüße
Dennis

Re: Mehrere LED`s ansteuern

Verfasst: Freitag 26. August 2022, 00:17
von __blackjack__
`PIL`/Pillow wäre so traditionell eine erste Anlaufstelle. Falls `tkinter` verfügbar und anwendbar ist, könnte man auch damit (mit ein bisschen tricksen weil `PhotoImage` die `index`-Option nicht kennt) die Daten lesen.