【问题标题】:Python Lighting RGB LED based off blink speed基于闪烁速度的 Python Lighting RGB LED
【发布时间】:2015-12-30 04:37:22
【问题描述】:

目前,我的程序接受用户输入的眨眼长度和眨眼之间的延迟,然后在设定的时间内循环通过灯光。我有一个 RGB 灯也连接到 Pi,我想要它,这样根据灯闪烁的速度,RGB 灯会改变颜色。由于程序现在,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 15 gpio 22

rgb 绿色 pin 13 gpio 27

rgb 蓝色针 11 gpio 17

【问题讨论】:

  • 只要提及我猜哪个 I/O 引脚用于哪个 LED 就足够了。抱歉,我仍然看不到你使用了哪些 io 引脚。
  • @torxed 左侧红色引脚 31 gpio 6 左侧蓝色引脚 33 gpio 13 左侧黄色引脚 35 gpio 19 左侧绿色引脚 37 gpio 26 右侧红色引脚 40 gpio 21 右侧蓝色引脚 36 gpio 16 右侧黄色引脚 38 gpio 20 RIGHT 绿色针 32 gpio 12 rgb 红色针 15 gpio 22 rgb 绿色针 13 gpio 27 rgb 蓝色针 11 gpio 17
  • 甜,现在这很有意义。我在手机上,否则我会尝试自己解决这个问题,建议在GPIO.setup(31, GPIO.OUT) 之后添加# RED Left 等。便于阅读:)

标签: python colors raspberry-pi led


【解决方案1】:

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

只是一个疯狂的猜测:

从图片中我看到您的 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)

【讨论】:

  • LED 是一个公共阳极,就像这里的 mpja.com/5mm-Red-Green-Blue-Full-Color-LED-4-Lead-Common-Anode/… 一样,但您在方法开始时需要将它们全部关闭是正确的,现在它可以工作了。谢谢!
  • 从您的接线以及它现在可以工作(以前没有工作)的事实来看,我认为您实际上使用的是共阴极 LED。尽管如此 - 无论类型如何 - 每个 LED 引脚都应该有自己的电阻器。否则,在尝试一次激活多个颜色时会遇到麻烦。修补愉快:-)
猜你喜欢
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多