Hallihallo
Vorab ein "Sorry" da die Antwort auf die Frage warscheinlich extrem simpel ist, aber ich beiße mir die Zähne an dem Thema aus.
Ich habe ein simples script zum ansteuern eines LED Stripes erstellt (Vermutlich lässt sich elbst dieses auf einige wenige Zeilen herunterbrechen, aber zumindest funktioniert es ) und hätte gerne, das dieses Skript sich unendlich wiederholt, bis ich Strg-C eingebe:
import time
from rpi_ws281x import *
import argparse
TOTAL_LED_COUNT = 150
strip = Adafruit_NeoPixel(TOTAL_LED_COUNT, 18, 800000, 5, False, 255)
strip.begin()
strip.setPixelColorRGB(1, 255, 255, 255)
strip.show()
time.sleep(5) # Sleep for 5 seconds
strip.setPixelColorRGB(1, 0, 0, 0)
time.sleep(1) # Sleep for 1 seconds
strip.setPixelColorRGB(2, 255,0, 255)
strip.show()
time.sleep(1) # Sleep for 1 seconds
strip.setPixelColorRGB(2, 0, 0, 0)
time.sleep(1) # Sleep for 1 seconds
strip.setPixelColorRGB(3, 255,0, 0)
strip.show()
time.sleep(1) # Sleep for 1 seconds
strip.setPixelColorRGB(3, 0, 0, 0)
time.sleep(1) # Sleep for 1 seconds
strip.setPixelColorRGB(4, 255,0, 0)
strip.show()
strip.setPixelColorRGB(5, 255,255, 0)
strip.show()
strip.setPixelColorRGB(6, 255,255, 255)
strip.show()
time.sleep(5) # Sleep for 5 seconds
strip.setPixelColorRGB(4, 0,0, 0)
strip.setPixelColorRGB(5, 0,0, 0)
strip.setPixelColorRGB(6, 0,0, 0)
time.sleep(7) # Sleep for 7 seconds
strip.setPixelColorRGB(147, 255,0, 0)
strip.setPixelColorRGB(148, 255,0, 0)
strip.setPixelColorRGB(149, 255,0, 0)
strip.show()
time.sleep(3) # Sleep for 3 seconds
strip.setPixelColorRGB(147, 0,0, 0)
strip.setPixelColorRGB(148, 0,0, 0)
strip.setPixelColorRGB(149, 0,0, 0)
strip.show()
Wo muss ich hier welche Zeilen einfügen, das sich das Skript endlos wiederholt?
Danke schonmal für die Antworten.
BG
Chris
Programmschleife erstellen
Das Python Tutorial aus der offiziellen Dokumentation ist ein super Eintieg um die Sprache zu lernen.
- DeaD_EyE
- User
- Beiträge: 1021
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Es bringt dir absolut nichts, wenn wir einfach die Lösung hier posten.Nasenbär77 hat geschrieben: ↑Donnerstag 18. August 2022, 11:42 Vorab ein "Sorry" da die Antwort auf die Frage warscheinlich extrem simpel ist, aber ich beiße mir die Zähne an dem Thema aus.
Du suchst nach `while`.
Die Farben können in eine Liste und dadurch kannst du Code deduplizieren.
Code: Alles auswählen
import time
# nur 2 Farben
rgbw_sleep = [
(1, 255, 255, 255, 5),
(1, 0, 0, 0 ,1),
(2, 0, 0, 0, 5),
]
# strip initialisieren
while True:
for *color, delay in rgbw_sleep:
print(color)
# strip.setPixelColorRGB(*color)
# strip.show()
print("Sleeping", delay, "seconds")
time.sleep(delay)
Dafür musst du aber die Basics kennen (Datentypen wie z.B. dict, set, tuple, list. Verschachteln kann man auch noch.
Wildcard-Imports beißen einen irgendwann in den Hintern und müllen die Modulebene zu.
Code: Alles auswählen
from rpi_ws281x import *
Richtig wäre z.B.:
Code: Alles auswählen
from rpi_ws281x import Adafruit_NeoPixel
Nicht verwendete Imports (argparse) entfernen.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
-
- User
- Beiträge: 4
- Registriert: Donnerstag 18. August 2022, 11:33
Danke für die schnellen Antworten.
Das Tuorial hatte ich schon versucht, aber auch hier hapert es an den Basics (Wo füge ich wann was ein):(
Ich bin zwar aus der IT Branche, aber Programmieren war bis jetzt kein "Need".
Da wollte ich mich einfach mal Hobbymäßig reinspielen, da ich das Thema interessant finde.
Dann starte ich "from the scratch" und schau mal wie weit ich komme
Anyway..... Morgen kommt mein Python3 Einsteiger-Wälzer und wurste mich da mal durch.
Vermutlich steh ich einfach nur auf dem Schlauch
Schönen Abend in die Runde....
Das Tuorial hatte ich schon versucht, aber auch hier hapert es an den Basics (Wo füge ich wann was ein):(
Ich bin zwar aus der IT Branche, aber Programmieren war bis jetzt kein "Need".
Da wollte ich mich einfach mal Hobbymäßig reinspielen, da ich das Thema interessant finde.
Dann starte ich "from the scratch" und schau mal wie weit ich komme
Anyway..... Morgen kommt mein Python3 Einsteiger-Wälzer und wurste mich da mal durch.
Vermutlich steh ich einfach nur auf dem Schlauch
Schönen Abend in die Runde....
- __blackjack__
- User
- Beiträge: 13112
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Nasenbär77: Ergänzende Anmerkungen zu dem was schon gesagt wurde: Kommentare sollen dem Leser einen Mehrwert über den Code geben. Faustregel: Kommentare beschreiben nicht *was* der Code macht, denn das steht da bereits als Code, sondern warum er das macht. Sofern das nicht offensichtlich ist. Offensichtlich ist in aller Regel auch was in der Dokumentation von Python und den verwendeten Bibliotheken steht. Bei den vorhandenen „sleep“-Kommentaren ist besonders ungünstig, dass da immer noch mal die Sekundenanzahl wiederholt wird. Das heisst wenn man die ändert muss man immer Code und Kommentar anpassen. Macht man das nicht, hat man einen Kommentar der nicht nur keinen Mehrwert hat, sondern auch noch dem Code widerspricht und der Leser weiss dann nicht ob der Code oder der Kommentar falsch ist, und der Kommentar erreicht das Gegenteil von dem wofür Kommentare gedacht sind. Er klärt dann keine Fragen, sondern wirft neue auf.
Einige `sleep()`-Aufrufe stehen an komischen Stellen. Die Änderungen an den LEDs werden ja erst sichtbar, wenn `show()` aufgerufen wird. Also macht es keinen Sinn `sleep()` zum Beispiel zwischen dem setzen von Farben aufzurufen, wo aber gar kein `show()` steht. Beispiel:
Zwischen den beiden `show()`-Aufrufen wird insgesamt 6 Sekunden gewartet. Es macht den Code unnötig unregelmässig diese Zeit auf zwei `sleep()`-Aufrufe zu verteilen. Der Leser muss das erkennen und selbst die Zeiten addieren um zu verstehen wie der Zeitablauf ist. Warum wird das so gemacht? Der Code könnte/sollte so aussehen:
Die Regelmässigkeit braucht man auch um den Ansatz von DeaD_EyE umzusetzen, das nicht als Code auszudrücken, sondern als Daten mit ein bisschen Code der die dann ”abspielt”.
Da es sich bei den Farben um welche handelt die ”bekannt” sind, würde es Sinn machen da Konstanten für zu definieren.
Das Programm könnte dann so aussehen (ungetestet):
Wobei sich hier noch die Frage stellt, ob die Schritte mit 0 Sekunden Dauer nicht auch zusammengefasst werden können/sollten. Ausgenommen vielleicht der letzte Schritt.
Einige `sleep()`-Aufrufe stehen an komischen Stellen. Die Änderungen an den LEDs werden ja erst sichtbar, wenn `show()` aufgerufen wird. Also macht es keinen Sinn `sleep()` zum Beispiel zwischen dem setzen von Farben aufzurufen, wo aber gar kein `show()` steht. Beispiel:
Code: Alles auswählen
strip.show()
time.sleep(5)
strip.setPixelColorRGB(1, 0, 0, 0)
time.sleep(1)
strip.setPixelColorRGB(2, 255, 0, 255)
strip.show()
Code: Alles auswählen
strip.show()
time.sleep(6)
strip.setPixelColorRGB(1, 0, 0, 0)
strip.setPixelColorRGB(2, 255, 0, 255)
strip.show()
Da es sich bei den Farben um welche handelt die ”bekannt” sind, würde es Sinn machen da Konstanten für zu definieren.
Das Programm könnte dann so aussehen (ungetestet):
Code: Alles auswählen
#!/usr/bin/env python3
import time
from rpi_ws281x import Adafruit_NeoPixel, Color
TOTAL_LED_COUNT = 150
LED_STRIP_PIN = 18
BLACK = Color(0, 0, 0)
RED = Color(255, 0, 0)
MAGENTA = Color(255, 0, 255)
WHITE = Color(255, 255, 255)
YELLOW = Color(255, 255, 0)
#
# Program steps made of LED numbers and colors, and a duration in seconds.
#
LED_PROGRAM = [
([(1, WHITE)], 6),
([(1, BLACK), (2, MAGENTA)], 2),
([(2, BLACK), (3, RED)], 2),
([(3, BLACK), (4, RED)], 0),
([(5, YELLOW)], 0),
([(6, WHITE)], 2),
(
[
(4, BLACK),
(5, BLACK),
(6, BLACK),
(147, RED),
(148, RED),
(149, RED),
],
3,
),
([(147, BLACK), (148, BLACK), (149, BLACK)], 0),
]
def main():
strip = Adafruit_NeoPixel(TOTAL_LED_COUNT, LED_STRIP_PIN, dma=5)
strip.begin()
for leds, duration in LED_PROGRAM:
for led, color in leds:
strip.setPixelColor(led, color)
strip.show()
time.sleep(duration)
if __name__ == "__main__":
main()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 4
- Registriert: Donnerstag 18. August 2022, 11:33
Super, Danke... funzt
Jetz muss ich nur noch den Code aufdröseln um auch zu kapieren, wie das funktioniert
Jetz muss ich nur noch den Code aufdröseln um auch zu kapieren, wie das funktioniert