Python 基于关闭闪烁速度点亮 RGB LED

Python Lighting RGB LED based off blink speed

目前,我的程序接受用户输入的眨眼长度和眨眼之间的延迟,然后在设定的时间量内循环点亮。我有一个 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

LEFT 蓝色引脚 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 的状态不清楚)。

尝试在启动时或在您的方法中将不需要的 GPIO RGB-pins 设置为 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)