关于c ++:Arduino | RGB LED灯条控制器

Arduino | RGB LED Strip Controller

我有一个Arduino UNO,我试图打开和关闭带状颜色(红色,绿色或蓝色)的灯。 这是我的代码,但是所有指示灯仍然亮着。 问题是,例如,我可能只想显示红色,但似乎无法关闭任何颜色。 我的针脚如下:

  • 红色:5
  • 绿色:6
  • 蓝色:3

我的设置:
enter image description here

默认控制器照片:
enter image description here

相关代码:

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)。

您可能需要在晶体管基极上增加电阻以吸收电流。

tip125/arduino transistor schematic

编辑3:
由于您可能不熟悉电子学,因此:如果基极低,则PNP晶体管将使集电极和发射极之间能够连接。含义:analogWrite(r, 0)将打开条带上的颜色,而analogWrite(r, 255)将关闭它。晶体管与晶体管之间被反相。

另外,我希望这很明显,请勿通过面包板或细线在每个颜色上布线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);
}