Arduino | RGB LED Strip Controller
我有一个Arduino UNO,我试图打开和关闭带状颜色(红色,绿色或蓝色)的灯。 这是我的代码,但是所有指示灯仍然亮着。 问题是,例如,我可能只想显示红色,但似乎无法关闭任何颜色。 我的针脚如下:
- 红色:5
- 绿色:6
- 蓝色:3
我的设置:
默认控制器照片:
相关代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | int ledPinR = 5; int ledPinG = 6; int ledPinB = 3; void setup() { pinMode(ledPinR, OUTPUT); pinMode(ledPinG, OUTPUT); pinMode(ledPinB, OUTPUT); } void loop() { analogWrite(ledPinR, 0); analogWrite(ledPinG, 0); analogWrite(ledPinB, 0); } |
我认为您在@Secko的回答下误解了我的最后评论,所以这是我的意思:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | int r = 5; int g = 6; int b = 3; void setup() { pinMode(r, OUTPUT); pinMode(g, OUTPUT); pinMode(b, OUTPUT); } void loop() { analogWrite(r, 128); delay(50); analogWrite(r, 0); analogWrite(g, 128); delay(50); analogWrite(g, 0); analogWrite(b, 128); delay(50); analogWrite(b, 0); delay(50); } |
您需要关闭最后打开的颜色才能获得红色,绿色和蓝色的闪烁灯。否则,如果在红色后打开绿色,则条带将在短时间内变为黄色。如果您随后打开蓝色,它将变成白色并保持白色,因为没有颜色被关闭过。
第二个参数是施加到引脚的电压。它的范围是0-255,其中0是0V,255是5V。 2.5V正好位于128的中间。
如果您的灯带很大(=> 3个LED和高能效LED。否则> 1),我希望您使用晶体管来减轻从arduino到晶体管的电流消耗。否则,您将很快吹响arduino。
编辑:
您可能已经通过从引脚上拉出太多电流(太多LED)来吹灭arduino。
您将需要在每种颜色和arduino之间使用一个PNP晶体管,该晶体管可以处理大电流(因为您驱动了许多LED),这意味着达林顿晶体管阵列集成电路。
就像TIP125一样。 (https://www.fairchildsemi.com/datasheets/TI/TIP125.pdf)
它的最大集电极电流为5A。将其正确放置在VCC和条带(VCC到集电极,条带到发射极)的中间,并将arduino连接到晶体管的基极。您将需要3个,每种颜色一个。
编辑2:
这是一个快速制作的原理图,向您展示了基础知识。它对于12V LED灯条应具有全部功能,其单个彩色电流消耗最大为5A(因此总计15A)。
您可能需要在晶体管基极上增加电阻以吸收电流。
编辑3:
由于您可能不熟悉电子学,因此:如果基极低,则PNP晶体管将使集电极和发射极之间能够连接。含义:
另外,我希望这很明显,请勿通过面包板或细线在每个颜色上布线5A。他们会烟熏起来。
您必须延迟操作,然后再打开或关闭下一个灯,如下所示:
编辑:适合您的情况的完整推子,您可能希望在循环中跳过4,但我会让您处理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | int ledPinR = 5; int ledPinG = 6; int ledPinB = 3; int brightness = 0; int fade = 5; void setup() { pinMode(ledPinR, OUTPUT); pinMode(ledPinG, OUTPUT); pinMode(ledPinB, OUTPUT); } void loop() { for(int LED_PIN = 3; LED_PIN<=6; LED_PIN++) { analogWrite(LED_PIN, brightness); //setting the brightness at LED pin brightness += fade; //brightness increasE if(brightness == 0 || brightness == 255){ fade = -fade; } delay(30); //time of delay is in miliseconds } } |
EDIT2:好,看到您的设置,我对您要使用的颜色做的还很遥远,不知道我是否应该删除答案,这现在在误导。希望延迟能有所帮助。
您必须添加pinMode()进行设置。
1 2 3 4 5 | void setup() { pinMode(ledPinR, OUTPUT); pinMode(ledPinG, OUTPUT); pinMode(ledPinB, OUTPUT); } |