2017-01-22 12 views
1

파이썬에서 한 색상에서 다른 색상으로 페이드하는 방법을 광범위하게 찾으려했습니다. 내가 찾은 대부분의 예제는 일반적으로 잘 번역되지 않는 다른 언어 나 장치에 한정됩니다.파이썬 - 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

계속 변화하는 질문을 가지고 일하기가 어렵습니다. 어쩌면 시간이 좀 걸리거나 * 편집 *할까요? –

+0

현재 쓰여지고있는 방식으로'steps' 인수를 마스킹하는 함수의 첫 번째 행에'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가 지적한대로, 당신을 정수 나누기를 할 수 있습니다. 귀하의 유형이 무엇인지 분명하지 않습니다. 파이썬 2를 사용하는 경우 /은 정수로 나뉩니다. Python 3에서는 부동 소수점입니다.

+0

좋은 한 번 감사드립니다. 내가 사용하는 라이브러리가 컬러의 부동 소수점을 지원하지 않기 때문에 단계를 int로 유지해야했습니다. 잘 작동하고 부드럽게 작동합니다. – Timmo

+0

글쎄, 내부적으로 부동 소수점을 만들 수 있고 색상을 설정할 때'int'로 변환 할 수 있습니다 (코드가 이미 수행중인 것처럼 보입니다). 그렇게 부드럽게 보일 수도 있습니다. –