Aus Flask ausbrechen

Django, Flask, Bottle, WSGI, CGI…
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@rehgum: Hat der Strip vielleicht gar keine 300 Pixel‽
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
rehgum
User
Beiträge: 22
Registriert: Montag 28. Februar 2022, 16:45

Na das will ich doch hoffen. Immerhin liegt hier ein LED Band mit 60 LEDs/m mit 5m länge :D
Wäre es möglich das ich 299 angeben muss weil die adressierung bei 0 beginnt? -> Nope
Aber wenn ich die 299 ansteuer leuchtet auch die letzte Diode auf dem Band
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Oder sind die Parameter zur zur Initialisierung von Adafruit_NeoPixel falsch?
Oder, dass getPixels() gar nicht tut, was du denkst? Kannst du mal die Dokumentation dazu verlinken, aus der hervor geht, dass man darüber iterieren kann und dass das nach den Pixels stoppt?
rehgum
User
Beiträge: 22
Registriert: Montag 28. Februar 2022, 16:45

Hey, nein dieser Code stammt aus diesen Topic hier auf seite 1 :/
Ich hatte je irgendwie gehoft einfach in eine variable zu schreiben welche LEDs zuletzt geschreiben wurden.
z.B LED_BLAU_ALT und dann wenn die neue LED ausgeworfen wird prüfen ob LED_BLAU_ALT is LED.
Aber ich kann die LED_BLAU_ALT nicht schreiben weil das Script bemängelt das den wert abfrage ehe ich ihn schreibe :/
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Also ich lese nicht aus der Dokumentation, dass das so geht.

Ich finde aber auch keine Dokumentation für die Python Bibliothek. Daher abgeleitet von der original Dokumentation und die Existenz von getPixelColorRGB ist geraten.

Code: Alles auswählen

def clear_color(strip, red, green, blue):
    color_to_clear = Color(red, green, blue)
    for index in range(strip.numPixels()):
        color = strip.getPixelColorRGB(index)
        if color_to_clear == color:
            strip.setPixelColorRGB(index, 0, 0, 0)
Ggf. musst du mal schauen, ob getPixelCokorRGB existiert und was dessen Rückgabe ist.
rehgum
User
Beiträge: 22
Registriert: Montag 28. Februar 2022, 16:45

Hey, also folgende erkenntniss:

Code: Alles auswählen

>>> def clear_color(strip, red, green, blue):
...     color_to_clear = Color(red, green, blue)
...     for index in range(strip.numPixels()):
...         color = strip.getPixelColorRGB(index)
...         if color_to_clear == color:
...             strip.setPixelColorRGB(index, 0, 0, 0)
...
>>> clear_color(strip, 255, 0, 0)
>>> clear_color(strip, 0, 0, 255)
>>> strip.getPixelColorRGB(299)
<function PixelStrip.getPixelColorRGB.<locals>.<lambda> at 0xb65fda48>
>>> range(strip.numPixels())
range(0, 300)
>>> print(index)
299
clear_color auszuführen bewirkt aber nichts (auch nicht nach strip.show())
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Na, du musst schon herausfinden, was genau .getPixelColorRGB() zurück gibt. Sonst wirst du deine vorher definierte Farbe damit gar nicht vergleichen können.
Die Dokumentation hast du leider noch immer nicht verlinkt. Alternativ gibt es natürlich immer die Möglichkeit in den Quelltext zu schauen oder im interaktiven Interpreter ein help() zu verwenden, in der Hoffnung, dass die Entwickler die Funktion dokumentiert haben.
rehgum
User
Beiträge: 22
Registriert: Montag 28. Februar 2022, 16:45

Mehr als das hab ich auch nicht:
https://github.com/richardghirst/rpi_ws281x

Und was

Code: Alles auswählen

>>> strip.getPixelColorRGB(299)
zurückgibt hab ich doch eben gepostet:

Code: Alles auswählen

<function PixelStrip.getPixelColorRGB.<locals>.<lambda> at 0xb65fda48>
Nochmal als print:

Code: Alles auswählen

>>> info = strip.getPixelColorRGB(299)
>>> print(info)
<function PixelStrip.getPixelColorRGB.<locals>.<lambda> at 0xb66c8a48>
oder meinst du etwas anderes?

Danke für deine Hilfe, auch wenn ich mich etwas dumm anstelle.
rehgum
User
Beiträge: 22
Registriert: Montag 28. Februar 2022, 16:45

Code: Alles auswählen

>>> def get_neopixel(index):
...  '''
...  Get the RGB value of a single pixel
...   '''
...  pixel = strip.getPixelColorRGB(index)
...  return (int(pixel.r), int(pixel.g), int(pixel.b))
...
>>> get_neopixel(1)
(0, 0, 0)
>>> get_neopixel(11)
(255, 0, 0)
>>>
Also ich bekomme den Wert so zurück.
Bekommen wir es damit hin?
Also ist tatsächlich so das die Nr. 1 aus ist und die Nr. 11 rot leuchtet. Alsod die Rückgabe stimmt

Ohne es zu zerlegen sieht die Rückgabe so aus:

Code: Alles auswählen

>>> print (pixel)
<function PixelStrip.getPixelColorRGB.<locals>.<lambda> at 0xb66c8a48>
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Ich bin etwas verwundert, weil in dem von dir verlinkten Projekt zwar eine "setPixelColorRGB" Methode existiert, aber keine "getPixelColorRGB" Methode.
Ich kann das ohne Hardware nicht testen, aber ich würde es mal so probieren:

Code: Alles auswählen

def clear_color(strip, red, green, blue):
    color_to_clear = Color(red, green, blue)
    for index in range(strip.numPixels()):
        color = strip.getPixelColor(index)
        if color_to_clear == color:
            strip.setPixelColorRGB(index, 0, 0, 0)
rehgum
User
Beiträge: 22
Registriert: Montag 28. Februar 2022, 16:45

sparrow hat geschrieben: Montag 14. März 2022, 12:37 Ich bin etwas verwundert, weil in dem von dir verlinkten Projekt zwar eine "setPixelColorRGB" Methode existiert, aber keine "getPixelColorRGB" Methode.
Ich kann das ohne Hardware nicht testen, aber ich würde es mal so probieren:

Code: Alles auswählen

def clear_color(strip, red, green, blue):
    color_to_clear = Color(red, green, blue)
    for index in range(strip.numPixels()):
        color = strip.getPixelColor(index)
        if color_to_clear == color:
            strip.setPixelColorRGB(index, 0, 0, 0)
OMG! Das funktioniert.
Darf ich ich mich dafür bedanken? Keine Ahnung, ein Paket mit einen Raspberry, Versterkerbaustein und LED-Stripe zum selber testen?
Antworten