Arduino | RGB LED灯条控制器

时间:2016-07-24 05:06:01

标签: c++ arduino rgb microcontroller led

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

  • RED:5
  • GREEN:6
  • 蓝色:3

我的设置: enter image description here

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

相关守则:

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);
}

3 个答案:

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

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

tip125/arduino transistor schematic

<强> 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:好的,看到你的设置,我对你想要用的颜色做了什么,不知道我是否应该删除答案,现在是错误的。希望延迟有所帮助。