GRB statt RGB LED, Modul ausbessern?

  • Hallo,
    bei meinen weiteren Tests, für meine Uhr, wo ich auch das Threading benötigte habe ich gerade festgestellt dass bei

    • 255, 0, 0 grün leuchtet
    • 0, 255, 0 rot leuchtet
    • 0, 0, 255 blau leuchtet

    Was somit in meinen Augen GRB LED sind
    Ich geh jetzt mal davon aus dass dies Hardwarebedingt ist?
    Gekauft wurde hier
    Auch ist ein Kondensator 1000µF, Widerstand 330 Ohm und Level Shifter verbaut.
    Bis hierhin sollte der Thread wohl fast in den Hardwarebereich.


    Eigener Code: (Endfassung wird dann nochmals im Threading Thema gepostet wo ja auch schon kunstruktive Kritiken zum Code exisitieren)

    Neopixel

    Jetzt dachte ich mir wenn ich die Funktion Color umschreibe, könnte ich das Problem umgehen, aber bisher ohne Erfolg:
    Orginal

    Code
    def Color(red, green, blue, white = 0):
           """Convert the provided red, green, blue color to a 24-bit color value.
           Each color component should be a value 0-255 where 0 is the lowest intensity
           and 255 is the highest intensity.
           """
          return (white << 24) | (red << 16)| (green << 8) | blue

    Änderung

    Code
    def Color(red, green, blue, white = 0):
           """Convert the provided red, green, blue color to a 24-bit color value.
           Each color component should be a value 0-255 where 0 is the lowest intensity
           and 255 is the highest intensity.
           """
          return (white << 24) | (green << 16)| (red << 8) | blue


    Libary auf das Neopixel basiert

    Kann mir jemand sagen wo ich bei dem Problem ansetzen muss?

    EDIT: Gerade auf Github von der Libary ein Issue gefunden der das selbe Problem beschreibt, aber ich kann mit dem Lösungsansatz nichts anfangen: hier
    Aber vielleicht ja einer von euch ;)

  • Code
    Traceback (most recent call last):
      File "uhr.py", line 162, in <module>
       strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_STRIP)
     File "/usr/local/lib/python3.5/dist-packages/rpi_ws281x-1.0.0-py3.5-linux-armv6l.egg/neopixel.py", line 79, in __init__
       ws.ws2811_channel_t_brightness_set(self._channel, brightness)
    OverflowError: in method 'ws2811_channel_t_brightness_set', argument 2 of type 'uint8_t'
    Speicherzugriffsfehler

    Nachdem ich hier das LED_STRIP ergänzte:

    Code
    # # # # # # # # # #
    # LED strip configuration:
    # # # # # # # # # #
    LED_COUNT   = 60      # Number of LED pixels.
    LED_PIN     = 18      # GPIO pin connected to the pixels (must support PWM!).
    LED_FREQ_HZ = 800000  # LED signal frequency in hertz (usually 800khz)
    LED_DMA     = 5       # DMA channel to use for generating signal (try 5)
    LED_INVERT  = False   # True to invert the signal (when using NPN transistor level shift)
    LED_STRIP = ws.WS2811_STRIP_GRB

    und auch bei der Objekterstellung hinzugefügt hatte:

    Code
    strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_STRIP)
    strip.begin()

    nur LED_STRIP = ws.WS2811_STRIP_GRB führte zu keinen Veränderungen

  • Hallo,

    hm... dann kann ich dir auch nicht helfen. Was aus der Github-Issue hervorgeht ist, dass es beim WS8211 wohl anders ist als beim WS8212, wobei soweit ich das verstehe die Reihenfolge beim WS8212 RGB sein soll.

    Was ist hier (mal wieder) festgestellt habe ist, dass die Dokus von Adafruit mehr so geht so sind. Das können andere (glücklicherweise!) besser.

    Letzter Versuch: richtig angeschlossen ist dein LED-Ring?

    Gruß, noisefloor

  • Ja die 3 Leitungen sind erfolgreich richtig angeschlossen :D

    Habe gerade den Fehler gefunden:

    Python
    class Adafruit_NeoPixel(object):
            def __init__(self, num, pin, freq_hz=800000, dma=5, invert=False,
                           brightness=255, channel=0, strip_type=ws.WS2811_STRIP_RGB):

    Da warum auch immer ich das nicht gemacht habe :angel: , die Parameter brightness, channel und strip_type nicht übergebe, so wurde natürlich der letzte Parameter falsch zugeordnet, was den Fehler verursachte.

    Code
    strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, strip_type= LED_STRIP)


    funktioniert jetzt tadellos, auch dass grün grün ist und rot rot :)

    :danke_ATDE: für deine Hilfe

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!