2017-01-22 12 views
1

私は、Pythonで色をフェードインさせる方法を広範囲に探しています。私が見つけた例のほとんどは、通常、デバイスに特有のものであり、翻訳がうまくいかない他の言語に固有のものです。Python - RGB LEDの退色

私は現在、例えば0から255までかなりフェージングしていた呼吸効果を作成するために使用された変更されたコードを持っています。今私が設定しているのはfromの色です。ちらつき。

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 

電話番号:その後、to色を設定し、あなたがcolorFromで開始し、徐々にあなたがcolorToに到達するまで直線に沿って をステップにしたいようですね

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

'' steps = 200.0''を試してください。おそらく、整数除算のためにstep_R/G/B変数を間違って計算しているかもしれません。 – jasonharper

+0

変化し続ける質問を扱うのは難しいです。たぶん、時間をかけて* one *を編集しますか? –

+0

現在書かれている方法では、 'steps' argをマスクする関数の最初の行に' steps'を割り当てています。 –

答えて

2

。このコードは何

あなたはcolorToからステッピングしているかのように、現在の 色をインクリメントし、colorFromでスタートです。

ハード

は、完全なコードなしで確かに、しかし、あなたが この置き換える必要があるように見えます:

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

編集:これで

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

をjasonharperが指摘したように、そして、あなたを整数除算を行っている可能性があります。あなたのタイプが何であるかは明らかではありません。 Python 2を使用している場合、/は整数除算です。 Python 3では、浮動小数点です。

+0

よろしくお願いいたします。私が使用するライブラリは色の浮動小数点数をサポートしていないので、ステップをintとして保持しなければなりませんでした。うまく動作しています – Timmo

+0

これは内部的に浮動小数点にして、色を設定するときに 'int'に変換するだけです(コードはすでに行っているように見えます)。そのように少しスムーズかもしれません。 –