基于关闭闪烁速度的 Python Lighting RGB LED

标签 python colors raspberry-pi led

目前,我的程序接受用户输入的眨眼长度和眨眼之间的延迟,然后在设定的时间量内循环显示灯光。我有一个 RGB 灯也连接到 Pi,我希望它能根据灯闪烁的速度改变颜色。就像现在的程序一样,RGB 灯将保持红色。我已经用不同的程序测试了 RGB 灯,它工作正常,所以我相当确定错误出在我的代码中,而不是接线中。感谢您的帮助!

# @kalenpw

import RPi.GPIO as GPIO
import time

#use raspberry pi pin numbers
GPIO.setmode(GPIO.BOARD)

GPIO.setwarnings(False)

#GPIO output channels
GPIO.setup(31, GPIO.OUT)
GPIO.setup(32, GPIO.OUT)
GPIO.setup(33, GPIO.OUT)
GPIO.setup(35, GPIO.OUT)
GPIO.setup(36, GPIO.OUT)
GPIO.setup(37, GPIO.OUT)
GPIO.setup(38, GPIO.OUT)
GPIO.setup(40, GPIO.OUT)
#RGB Light
GPIO.setup(15, GPIO.OUT)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(11, GPIO.OUT)

#Make LED blink 
def blink(pin):
    GPIO.output(pin,1)
    time.sleep(lightOnDuration)
    GPIO.output(pin,0)
    time.sleep(lightOffDuration)
    return

#turn on RGB led based off blink duration
def RGBTurnOn():
    #turn on red
    if lightOnDuration < .5:
        GPIO.output(15,1)
    #turn on green
    elif lightOnDuration < 2:
        GPIO.output(13,1)
    #turn on blue
    else:
        GPIO.output(11,1)

#Get number from user TODO fix
def getFloat(message):
    while True:
        try:
            userInput = float(input(message))
        except ValueError:
            print("Error(01): please enter a number.")
            continue
        else:
            return userInput
            break

#Get integer from user TODO fix
def getInt(message):
    while True:
        try:
            userInput = int(input(message))
        except ValueError:
            print("Error(02): please enter an integer.")
            continue
        else:
            return userInput
            break

#Starts LED loop
def StartLoop():
    RGBTurnOn()
    for i in range(0,numberOfCycles):
        blink(32)#5v green
        blink(38)#5v yellow
        blink(36)#5v blue
        blink(40)#5v red
        blink(37)#3v3 green
        blink(35)#3v3 yellow
        blink(33)#3v3 blue
        blink(31)#3v3 red

#Get light on & off durations
lightOnDuration = getFloat("How man seconds for blink length?\n")
lightOffDuration = getFloat("How many seconds do you want between blinks?\n")
cycleDuration = (lightOnDuration + lightOffDuration) *8
cycleDurationString = str(cycleDuration) + " second(s)."
numberOfCycles = getInt("Enter total number of cycles please.\n"
                       "Each cycle will take aproximately " + cycleDurationString +"\n")

StartLoop()

GPIO.cleanup()

布线图片:

RGB:http://i.imgur.com/4RxSD24.jpg

LED:http://i.imgur.com/DmZRCVJ.jpg?1

左侧红色引脚 31 gpio 6

左蓝针 33 gpio 13

左黄色引脚 35 gpio 19

左绿色引脚 37 gpio 26

右侧红色引脚 40 gpio 21

右侧蓝色引脚 36 gpio 16

右侧黄色引脚 38 gpio 20

右侧绿色引脚 32 gpio 12

rgb 红色 pin pin 15 gpio 22

rgb 绿针 13 gpio 27

rgb 蓝针 11 gpio 17

最佳答案

你的编程对我来说似乎是正确的。

只是一个疯狂的猜测:

从图片上看你的RGB-LED是共阴型的。因此,您应该为每个 LED 阳极添加一个单独的电阻器 - 而不是为阴极添加一个电阻器。 你没有,因此,红色 LED 可能会消耗所有可用电流(如果绿色或蓝色设置为 ON,红色 GPIO 的状态将不清楚)。

尝试在启动时或在您的方法中将不需要的 RGB 引脚的 GPIO 设置为 OFF。

def RGBTurnOn():
    GPIO.output(15,0)
    GPIO.output(13,0)
    GPIO.output(11,0)
    #turn on red
    if lightOnDuration < .5:
        GPIO.output(15,1)
    #turn on green
    elif lightOnDuration < 2:
        GPIO.output(13,1)
    #turn on blue
    else:
        GPIO.output(11,1)

关于基于关闭闪烁速度的 Python Lighting RGB LED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34522968/

相关文章:

node.js - Electron 无法在 Raspberry Pi 3b+ 中使用 <audio> Html5 标签播放 mp3 音频文件

python - SJ4000 + OpenCV + Raspberry Pi 图像处理

python - 如何在 Python 中拆分数字后显示前导零

python - 使用 numpy 进行网格分布

python - 使用其自身的简化副本对复杂列表进行重复数据删除

c# - 从 HSV 中提取色度/相对色度

python - 为什么 setuptools 不复制子文件夹中的模块?

按钮上的 CSS3 颜色过渡

algorithm - 生成具有最高多样性的 RGB 颜色集

linux - 安装没有邮件和sql依赖项的cron