RGB-светодиод
1
2
3
4
B
G
R
-
- Синий канал светодиода
- Зеленый канал светодиода
- Красный канал светодиода
- Общий вывод (GND)
  • В общем случае имеется непосредственно RGB-светодиод, который в сущности представляет из себя три светодиода (красный, зеленый, синий), объединенные в одном прозрачном корпусе. Тогда, при подключении к каждому из трех каналов необходимо использовать токоограничивающие резисторы, как при подключении обычного светодиода. Если используется GRB-модуль с выводами, как на верхнем левом рисунке, резисторы уже распаяны на плате и выводы модуля можно подключать непосредственно к пинам Arduino.
  • Существует два вида RGB-светодиодов. С общим катодом, значит, что все катоды трех светодиодов соединены в один и должны быть подключены к GND. С общим анодом, значит, что все аноды трех светодиодов соединены в один и должны быть подключены к +5 В.
  • Выводы RGB-светодиода должны быть подключены к ШИМ (PWM) пинам Arduino. Эти пины обозначены на плате знаком тильды (~). Шим пины позволяют использовать функцию analogWrite, для плавного изменения яркости каждого канала.
Типовая схема подключения
Функции для работы с RGB-светодиодом:
analogRead(pin, value); - записать значение от 0 до 255 в пин Arduino для установления пропорционального напряжения от 0 до 5 В.
Пример кода
#define RED 3
#define GREEN 5
#define BLUE 6

enum Color{
  red=1,
  orange,
  yellow,
  green,
  cyan,
  blue,
  violet
};

void setup() {
  setColorRGB(255,0,0);
  delay(1000);
  setColorRGB(0,255,0);
  delay(1000);
  setColorRGB(0,0,255);
  delay(1000);
  for(int k=0;k<3;k++){
    for(int i=red;i!=violet;i++){
      setColor(static_cast<Color>(i));
      delay(200);
    }
  }
}

void loop() {
  riseColor(15);
}

void setColorRGB(int r, int g, int b){
  analogWrite(RED,r);
  analogWrite(GREEN,g);
  analogWrite(BLUE,b);
}

void setColor(enum::Color color){
  switch(color){
    case red:
      setColorRGB(255,0,0);
      break;
    case orange:
      setColorRGB(255,128,0);
      break;
    case yellow:
      setColorRGB(255,255,0);
      break;
    case green:
      setColorRGB(0,255,0);
      break;
    case cyan:
      setColorRGB(0,255,255);
      break;
    case blue:
      setColorRGB(0,0,255);
      break;
    case violet:
      setColorRGB(255,0,255);
      break;
  }
}

void riseColor(int speed){
    setColorRGB(255,0,0);

    for (int i=0;i<=255;i++){
      setColorRGB(255,i,0);
      delay(speed);
    }
    for (int i=255;i>=0;i--){
      setColorRGB(i,255,0);
      delay(speed);
    }
    for (int i=0;i<=255;i++){
      setColorRGB(0,255,i);
      delay(speed);
    }
    for (int i=255;i>=0;i--){
      setColorRGB(0,i,255);
      delay(speed);
    }
    for (int i=0;i<=255;i++){
      setColorRGB(i,0,255);
      delay(speed);
    }
    for (int i=255;i>=0;i--){
      setColorRGB(255,0,i);
      delay(speed);
    }
}