Inicio / Arduino

Placa de desarrollo Arduino UNO - LED RGB

Un LED RGB es un diodo emisor de luz que puede producir distintos colores combinando rojo (Red), verde (Green) y azul (Blue). En un solo encapsulado lleva tres LED internos que se controlan por separado.

En este ejemplo recorremos 7 colores con un pulsador y apagamos con el otro, encendiendo uno, dos o los tres canales a la vez.

Conexiones

Cada canal necesita su propia resistencia limitadora; sin ellas el LED se degrada y puedes dañar el pin del Arduino.

Patilla del LEDConexiónNota
RojoPin 11Resistencia de 220 Ω
VerdePin 12Resistencia de 220 Ω
AzulPin 13Resistencia de 220 Ω
ComúnGNDSi es de cátodo común
Pulsadores: SWITCH1 en A2 (cambiar color) y SWITCH2 en A3 (apagar), ambos a GND con INPUT_PULLUP.

Cátodo común o ánodo común

Este código enciende cada canal poniéndolo en HIGH, lo que asume un LED de cátodo común (la patilla larga va a GND).

Si el tuyo es de ánodo común, la patilla larga va a 5 V y la lógica se invierte: se enciende con LOW y se apaga con HIGH. Si al montarlo ves todos los colores menos el que esperas, casi siempre es esto.

Colores y combinaciones

ValorColorCanales encendidos
0Apagado
1RojoR
2VerdeG
3AzulB
4AmarilloR + G
5CianG + B
6MagentaR + B
7BlancoR + G + B

Código del programa

Arduino / C++
// Definición de pines según el diagrama
const int LED_R   = 11;  // Rojo
const int LED_G   = 12;  // Verde
const int LED_B   = 13;  // Azul

const int SWITCH1 = A2;  // Cambiar color
const int SWITCH2 = A3;  // Apagar

// 0=apagado, 1=rojo, 2=verde, 3=azul,
// 4=amarillo, 5=cian, 6=magenta, 7=blanco
int color = 0;

void setup() {
  pinMode(LED_R, OUTPUT);
  pinMode(LED_G, OUTPUT);
  pinMode(LED_B, OUTPUT);
  pinMode(SWITCH1, INPUT_PULLUP);
  pinMode(SWITCH2, INPUT_PULLUP);

  apagarLED();
}

void loop() {
  // Switch 1 -> cambiar color
  if (digitalRead(SWITCH1) == LOW) {
    color++;
    if (color > 7) color = 1;
    mostrarColor(color);
    delay(300);
  }

  // Switch 2 -> apagar
  if (digitalRead(SWITCH2) == LOW) {
    color = 0;
    apagarLED();
    delay(300);
  }
}

void mostrarColor(int c) {
  apagarLED();

  switch (c) {
    case 1:  // Rojo
      digitalWrite(LED_R, HIGH);
      break;
    case 2:  // Verde
      digitalWrite(LED_G, HIGH);
      break;
    case 3:  // Azul
      digitalWrite(LED_B, HIGH);
      break;
    case 4:  // Amarillo (rojo + verde)
      digitalWrite(LED_R, HIGH);
      digitalWrite(LED_G, HIGH);
      break;
    case 5:  // Cian (verde + azul)
      digitalWrite(LED_G, HIGH);
      digitalWrite(LED_B, HIGH);
      break;
    case 6:  // Magenta (rojo + azul)
      digitalWrite(LED_R, HIGH);
      digitalWrite(LED_B, HIGH);
      break;
    case 7:  // Blanco (rojo + verde + azul)
      digitalWrite(LED_R, HIGH);
      digitalWrite(LED_G, HIGH);
      digitalWrite(LED_B, HIGH);
      break;
  }
}

void apagarLED() {
  digitalWrite(LED_R, LOW);
  digitalWrite(LED_G, LOW);
  digitalWrite(LED_B, LOW);
}

Cómo funciona

Cada pulsación de SWITCH1 avanza al siguiente color en el orden rojo, verde, azul, amarillo, cian, magenta y blanco. Al pasar de 7 vuelve a 1, así que el ciclo no se detiene. SWITCH2 apaga todo y reinicia el contador a 0.

Los colores combinados salen de encender dos o tres canales a la vez: el amarillo mezcla rojo y verde, el cian mezcla verde y azul, el magenta mezcla rojo y azul, y el blanco enciende los tres.

mostrarColor() llama primero a apagarLED(), que es lo que evita que queden canales encendidos del color anterior — el equivalente a limpiar la pantalla antes de escribir.

Posibles mejoras

Con digitalWrite cada canal solo puede estar encendido o apagado, de ahí que salgan 7 colores y no más. Para conseguir tonos intermedios (naranja, morado, rosa) haría falta analogWrite con valores de 0 a 255 por canal.

Ahora bien, analogWrite solo funciona en los pines PWM, que en el Arduino UNO son el 3, 5, 6, 9, 10 y 11. En este montaje únicamente el rojo (pin 11) lo es; habría que mover el verde y el azul a dos pines PWM libres —por ejemplo el 9 y el 10— antes de intentarlo.