2017-01-22 3 views
1

Ich habe mich intensiv umgesehen und versucht, eine Methode zu finden, um in Python zwischen den Farben zu wechseln. Die meisten Beispiele, die ich gefunden habe, sind normalerweise spezifisch für ein Gerät oder in einer anderen Sprache, die nicht gut übersetzt werden kann.Python - RGB LED Farbe Fading

Ich habe derzeit ein modifiziertes Stück Code, der verwendet wurde, um einen Atmungseffekt zu erzeugen, der ziemlich gut funktionierte und zum Beispiel von 0 bis 255 verblasste. Was ich jetzt habe, setzt die from Farbe, sagen grün; flackert; dann setzt die to Farbe:

def colorFade(strip, colorFrom, colorTo, wait_ms=20, steps=10): 
    steps = 200 

    step_R = int(colorTo[0])/steps 
    step_G = int(colorTo[1])/steps 
    step_B = int(colorTo[2])/steps 
    r = int(colorFrom[0]) 
    g = int(colorFrom[1]) 
    b = int(colorFrom[2]) 

    for x in range(steps): 
     c = Color(int(r), int(g), int(b)) 
     for i in range(strip.numPixels()): 
      strip.setPixelColor(i, c) 
     strip.show() 
     time.sleep(wait_ms/1000.0) 
     r += step_R 
     g += step_G 
     b += step_B 

Telefonvorwahl:

colorFade(strip, [200, 0, 0], [0, 200, 0]) 
+2

Versuchen Sie es mit '' steps = 200.0'' - wahrscheinlich berechnen Sie die Variable step_R/G/B aufgrund von Integer Division falsch. – jasonharper

+0

Es ist schwer mit einer Frage zu arbeiten, die sich ständig ändert. Vielleicht nimm dir etwas Zeit und mach * eine * Bearbeitung? –

+0

Wie es gerade geschrieben wird, weisen Sie in der ersten Zeile der Funktion 'steps' zu, die den 'steps' arg maskiert. –

Antwort

2

Es klingt wie Sie bei colorFrom beginnen möchten, und entlang einer geraden Linie allmählich Schritt, bis Sie colorTo erreichen.

Was dieser Code tut, ist bei colorFrom starten, dann erhöhen Sie die aktuelle Farbe, als ob Sie von schwarz-colorTo Schritt wurden.

Fest ohne den vollständigen Code sicher sein, aber es sieht aus wie Sie diese ersetzen sollten: Sie Und wie jasonharper darauf hingewiesen,:

step_R = int(colorTo[0])/steps 
step_G = int(colorTo[1])/steps 
step_B = int(colorTo[2])/steps 

mit diesem:

step_R = (colorTo[0] - colorFrom[0])/steps 
step_G = (colorTo[1] - colorFrom[1])/steps 
step_B = (colorTo[2] - colorFrom[2])/steps 

bearbeiten kann ganzzahlige Division machen. Nicht klar, was deine Typen sind. Wenn Sie Python 2 verwenden, ist / Integer-Division. In Python 3 ist es Gleitkomma.

+0

Nice one thanks. Ich musste die Schritte als Int beibehalten, da die Bibliothek, die ich verwende, keine Fließkommazahlen für Farbe unterstützt. Es funktioniert auch ziemlich gut und glatt – Timmo

+0

Nun, Sie könnten sie Floating-Point intern machen und nur in "Int" konvertieren, wenn Farben (die der Code sieht es bereits tut). Könnte auf diese Weise ein bisschen glatter sein. –