Python-根据温度使led颜色褪色

Python-根据温度使led颜色褪色,python,Python,我使用树莓pi、tip120晶体管和Python2.7来控制led条,除了颜色之间的褪色外,一切都正常工作。我试图根据温度读数从一种颜色变为另一种颜色,目前我可以设置led的颜色,但它不会褪色。这是到目前为止我的代码,我对python还很陌生,所以如果有任何帮助,我将不胜感激。提前谢谢 if (x <= 77): ledred=100 ledgreen=100 ledblue=100 elif (x > 78)

我使用树莓pi、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)
if(x 78)和(x<80):
对于范围内的i(LED指示灯,-1,-1):
ledred=i
对于范围内的j(LED绿色,-1,-1):
莱德格林=j
对于范围内的k(LED蓝色,100,1):
莱德蓝=k
elif(x>80)和(x<100):
对于范围内的i(LED指示灯,-1,-1):
ledred=i
对于范围内的j(LED绿色,100,1):
莱德格林=j
对于范围内的k(LED蓝色,-1,-1):
莱德蓝=k
elif(x>100)和(x<110):
循环=100
对于范围内的i(LED,100,1):
ledred=i
对于范围内的j(LED绿色,100,1):
莱德格林=j
对于范围内的k(LED蓝色,-1,-1):
莱德蓝=k
其他(x>110):
对于范围内的i(LED,100,1):
ledred=i
对于范围内的j(LED绿色,-1,-1):
莱德格林=j
对于范围内的k(LED蓝色,-1,-1):
莱德蓝=k
红色。更换DutyCycle(LED红色)
绿色。更换DutyCycle(LED绿色)
蓝色。更换DutyCycle(LED蓝色)

好吧,在尝试了几种不同的方法重新编写之后,下面的代码几乎满足了我的要求。它检查温度(x),然后根据温度初始化每个led颜色通道(分别为红色、绿色和蓝色)中的占空比变化。循环的每个循环将占空比向上或向下调整7,并且每个颜色的值都是上限值,分别为0和100。通过调整添加到w、y和z上的数字,可以使过渡变得更加戏剧化或不那么戏剧化。我已经添加了一个对象(fan1),刚刚完成蚀刻我的第一块电路板。我现在有一个功能齐全的raspberry pi 7风扇控制器,带有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
#/usr/bin/env python2.7
#Eric Johnsten利用以下信息编写的脚本:
#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
将RPi.GPIO作为GPIO导入#始终需要RPi.GPIO
导入testtemp
导入操作系统
从时间导入睡眠#从时间模块中拉入睡眠功能
GPIO.setmode(GPIO.BCM)#选择BCM或板编号方案。
GPIO.setup(17,GPIO.OUT)#将GPIO 17设置为风扇1的输出
#GPIO.setup(18,GPIO.OUT)#将GPIO 18设置为风扇2的输出
GPIO.setup(26,GPIO.OUT)#红色通道
GPIO.setup(19,GPIO.OUT)#绿色通道
GPIO.setup(13,GPIO.OUT)#蓝色通道
fan1=GPIO.PWM(17100)#对象fan1用于端口17上100赫兹的PWM
#fan2=GPIO.PWM(18100)#对象fan2用于端口18上100赫兹的PWM
蓝色=GPIO.PWM(26100)#红色通道100赫兹的对象
红色=GPIO.PWM(19100)#绿色通道100赫兹的对象
绿色=GPIO.PWM(13100)#蓝色通道100赫兹的对象
风扇1.启动(0)
#风扇2.启动(0)
红色。开始(50)
绿色。开始(50)
蓝色。开始(50)
w=100
y=100
z=100
f=0
尝试:
尽管如此:
#睡眠(.02)
操作系统(“清除”)
#从传感器获取温度并确定pwm风扇转速
x=测试温度读取温度()
打印x
如果(x 100):
w=100
如果(y>100):
y=100
如果(z>100):
z=100
如果(w<0):
w=0
如果(y<0):
y=0
如果(z<0):
z=0
红色。更换工作循环(w)
绿色。更换工作循环(y)
蓝色。变化周期(z)
f=0
elif(x>78)和(x<80):
w=w-7
y=y-7
z=z+7
f=60
如果(w>100):
w=100
如果(y>100):
y=100
如果(z>100):
z=100
如果(w<0):
w=0
如果(y<0):
y=0
如果(z<0):
z=0
红色。更换工作循环(w)
绿色。更换工作循环(y)
蓝色。变化周期(z)
fan1.更换周期(60)
elif(x>80)和(x<100):
w=w-7
y=y+7
z=z-7
f=70
如果(w>100):
w=100
如果(y>100):
y=100
如果(z>100):
z=100
如果(w<0):
w=0
如果(y<0):
y=0
如果(z<0):
z=0
红色。更换工作循环(w)
绿色。更换工作循环(y)
蓝色。变化周期(z)
fan1.更换工作周期(70)
elif(x>100)和(x<110):
w=w+7
y=y+7
z=z-7
f=85
如果(w>100):
w=100
如果(y>100):
y=100
如果(z>100):
z=100
如果(w<0):
w=0
如果(y<0):
y=0
如果(z<0):
z=0
红色。更换工作循环(w)
绿色。更换工作循环(y)
蓝色。变化周期(z)
fan1.更换工作周期(85)
elif(x>110):
w=w+7
y=y-7
z=z-7
f=100
如果(w>100):
w=100
如果(y>100):
y=100
如果(z>100):
z=100
如果(w<0):
w=0
如果(y<0):
y=0
如果(z<0):
z=0
红色。更换工作循环(w)
绿色。更换工作循环(y)
蓝色。变化周期(z)
fan1.更换周期(100)
打印“设定点:77.0F\n打印:”+str(testtemp.read_temp())+“\n打印速度:”,str(f)+'%
打印w
打印y
打印z
睡眠(0.02)
除键盘中断外:
风扇1.停止()#停止风扇1 PWM输出