我有一个Arduino UNO,我试图打开和关闭条带的颜色(红色,绿色或蓝色)。这是我的代码,但所有的灯仍然亮着。问题是,例如我可能只想显示颜色RED,但我似乎无法关闭任何颜色。我的引脚如下:
相关守则:
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);
}
答案 0 :(得分:1)
我认为你在@ Secko的回答中误解了我的最后评论,所以这就是我的意思:
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。 128正好在2.5V的中间。
如果您的条带很大(=> 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个,每种颜色一个。
<强> EDIT2:强> 这是一个非常快速的原理图,向您展示基础知识。它应该是12V LED灯条的完全功能,单个色彩电流消耗高达5A(总共15A)。
您可能需要在晶体管基极上添加电阻以吸收电流。
<强> EDIT3:强>
由于您可能不熟悉电子设备:如果基极电压较低,PNP晶体管将实现集电极和发射极之间的连接。含义:analogWrite(r, 0)
将打开条带上的颜色,analogWrite(r, 255)
将关闭它。它与晶体管之间反转。
另外,我希望这是显而易见的,不要通过面板或通过小线路来获得每种颜色的5A。他们会在烟雾中出现。
答案 1 :(得分:0)
你必须添加pinMode()来设置。
void setup() {
pinMode(ledPinR, OUTPUT);
pinMode(ledPinG, OUTPUT);
pinMode(ledPinB, OUTPUT);
}
答案 2 :(得分:0)
你需要延迟操作,然后开启或关闭下一盏灯:
编辑:你的案例的完整推子,你可能想在循环中跳过4,但我会让你处理它。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:好的,看到你的设置,我对你想要用的颜色做了什么,不知道我是否应该删除答案,现在是错误的。希望延迟有所帮助。