Python - 温度依赖的渐变LED颜色

2024-07-01 07:30:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我用树莓皮,tip120晶体管,和python2.7来控制一个led条,除了颜色之间的褪色,一切都正常工作。我试图根据温度读数从一种颜色变为另一种颜色,目前我可以设置led的颜色,但不会褪色。这是我目前为止的代码,我对python还很陌生,所以如果有任何帮助,我将不胜感激。提前谢谢。在

        if (x <= 77):
        ledred=100
        ledgreen=100
        ledblue=100
    elif (x > 78) and (x < 80):
            for i in range(ledred,-1,-1):
                ledred=i
            for j in range(ledgreen,-1,-1):
                ledgreen=j
            for k in range(ledblue,100,1):
                ledblue=k
    elif (x > 80) and (x < 100):
            for i in range(ledred,-1,-1):
                ledred=i
            for j in range(ledgreen,100,1):
                ledgreen=j
            for k in range(ledblue,-1,-1):
                ledblue=k
    elif (x > 100) and (x < 110):
            cycle=100
            for i in range(ledred,100,1):
                ledred=i
            for j in range(ledgreen,100,1):
                ledgreen=j
            for k in range(ledblue,-1,-1):
                ledblue=k
    else (x > 110):
            for i in range(ledred,100,1):
                ledred=i
            for j in range(ledgreen,-1,-1):
                ledgreen=j
            for k in range(ledblue,-1,-1):
                ledblue=k
    red.ChangeDutyCycle(ledred)
    green.ChangeDutyCycle(ledgreen)
    blue.ChangeDutyCycle(ledblue)

Tags: andinforled颜色range温度树莓
1条回答
网友
1楼 · 发布于 2024-07-01 07:30:34

好吧,在尝试了几种不同的方法重写它之后,下面的代码基本上实现了我想要的效果。它检查温度(x),然后根据温度初始化每个led颜色通道中的占空比变化(分别为红色、绿色、蓝色)。循环的每个周期将占空比上下调整7,每种颜色的值为上限和0和100。通过调整w、y和z上的数字,可以使转换变得更戏剧化或更少戏剧性。我添加了一个对象(fan1),刚刚完成了我的第一块电路板的蚀刻。我现在有一个功能齐全的raspberry Pi7风扇控制器和led温度指示。这将被添加到我的自定义案例生成中。我很感激你的帮助。谢谢,最后的工作代码是:

#!/usr/bin/env python2.7  
# script by Eric Johnsten utilizing info from:
#http://RasPi.tv/2013/how-to-use-soft-pwm-in-rpi-gpio-pt-2-led-dimming-and-motor-speed-control
#https://github.com/SimplyAutomationized/raspberrypi/tree/master/pidfanpi

import RPi.GPIO as GPIO # always needed with RPi.GPIO  
import testtemp 
import os
from time import sleep  # pull in the sleep function from time module  

GPIO.setmode(GPIO.BCM)  #choose BCM or BOARD numbering schemes. 

GPIO.setup(17, GPIO.OUT)  #set GPIO 17 as output for fan1  
#GPIO.setup(18, GPIO.OUT) #set GPIO 18 as output for fan2  
GPIO.setup(26, GPIO.OUT)  #Red Channel
GPIO.setup(19, GPIO.OUT)  #Green Channel
GPIO.setup(13, GPIO.OUT)  #Blue Channel

fan1 = GPIO.PWM(17, 100)    #object fan1 for PWM on port 17 at 100 Hertz  
#fan2 = GPIO.PWM(18, 100)   #object fan2 for PWM on port 18 at 100 Hertz  
blue = GPIO.PWM(26, 100)    #object for red channel 100 Hertz
red = GPIO.PWM(19, 100)     #object for green channel 100 Hertz
green = GPIO.PWM(13, 100)   #object for blue channel 100 Hertz

fan1.start(0)
#fan2.start(0)
red.start(50)
green.start(50)
blue.start(50)

w=100
y=100
z=100
f=0

try:
    while True:
        #sleep(.02)
        os.system('clear')
    #get temperature from sensor and determine pwm fan speed
    x = testtemp.read_temp()
    print x
    if (x <= 77):
        w=w+7
        y=y+7
        z=z+7
        if (w > 100):
            w=100
        if (y > 100):
            y=100
        if  (z > 100):
            z=100
        if (w < 0):
            w=0
        if (y < 0):
            y=0
        if (z < 0):
            z=0
        red.ChangeDutyCycle(w)
        green.ChangeDutyCycle(y)
        blue.ChangeDutyCycle(z)
        f=0
    elif (x > 78) and (x < 80):
        w=w-7
        y=y-7
        z=z+7
        f=60
        if (w > 100):
            w=100
        if (y > 100):
            y=100
        if  (z > 100):
            z=100
        if (w < 0):
            w=0
        if (y < 0):
            y=0
        if (z < 0):
            z=0
        red.ChangeDutyCycle(w)
        green.ChangeDutyCycle(y)
        blue.ChangeDutyCycle(z)
        fan1.ChangeDutyCycle(60)
    elif (x > 80) and (x < 100):
        w=w-7
        y=y+7
        z=z-7
        f=70
        if (w > 100):
            w=100
        if (y > 100):
            y=100
        if  (z > 100):
            z=100
        if (w < 0):
            w=0
        if (y < 0):
            y=0
        if (z < 0):
            z=0
        red.ChangeDutyCycle(w)
        green.ChangeDutyCycle(y)
        blue.ChangeDutyCycle(z)
        fan1.ChangeDutyCycle(70)
    elif (x > 100) and (x < 110):
        w=w+7
        y=y+7
        z=z-7
        f=85
        if (w > 100):
            w=100
        if (y > 100):
            y=100
        if  (z > 100):
            z=100
        if (w < 0):
            w=0
        if (y < 0):
            y=0
        if (z < 0):
            z=0
        red.ChangeDutyCycle(w)
        green.ChangeDutyCycle(y)
        blue.ChangeDutyCycle(z)
        fan1.ChangeDutyCycle(85)
    elif (x > 110):
        w=w+7
        y=y-7
        z=z-7
        f=100
        if (w > 100):
            w=100
        if (y > 100):
            y=100
        if  (z > 100):
            z=100
        if (w < 0):
            w=0
        if (y < 0):
            y=0
        if (z < 0):
            z=0
        red.ChangeDutyCycle(w)
        green.ChangeDutyCycle(y)
        blue.ChangeDutyCycle(z)
        fan1.ChangeDutyCycle(100)
    print 'Setpoint: 77.0F \nTemp: '+str(testtemp.read_temp())+' \nFan Speed: ',str(f)+'%'
    print w
    print y
    print z
    sleep(0.02)
except KeyboardInterrupt:  
fan1.stop()             # stop Fan 1 PWM output  
#fan2.stop()            # stop Fan 2 PWM output 
red.stop()              # stop red leds
green.stop()            # stop green leds
blue.stop()             # stop blue leds
GPIO.cleanup()          # clean up GPIO on CTRL+C exit  
pass

相关问题 更多 >

    热门问题