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