En este nuevo post combino el manejo de un diodo led RGB con la comunicación mediante el puerto USB con un programa en C#. Un diodo led RGB es similar a un diodo led común, con la particularidad de que puede brillar con "cualquier" color. Esto se consigue mediante combinaciones de 3 luces (roja, verde y azul), generadas en el interior del encapsulado.

El led RGB tiene por tanto 4 patas, una común (5V en mi caso), y las otras 3 se corresponden al cátodo de cada uno de los colores. La modulación de la intensidad de cada color se consigue mediante PWM (Modulación de Anchura de Pulsos), por lo que es imprescindible usar los pines 3, 5, 6, 9, 10 u 11 del Arduino UNO (los únicos con esta capacidad)..

El esquema de conexiones es el siguiente:

Esquema de conexionesPor otro lado, el código usado en Arduino es:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// Definición de los pines de salida
int pin_r = 5;
int pin_g = 6;
int pin_b = 9;
 
// Variable donde se guardan los datos
char rgb[3];
 
void setup()  { 
  // Declaración de los pines como salida
  pinMode(pin_r, OUTPUT);
  pinMode(pin_g, OUTPUT);
  pinMode(pin_b, OUTPUT);
 
  // Inicialización del puerto serie
  Serial.begin(9600);
 
} 
 
void loop()  {  
  if(Serial.available())
  {
    // Si está disponible, leemos 3 bytes del puerto serie
    Serial.readBytes(rgb, 3);
 
    // Escribimos el valor de cada color
    analogWrite(pin_r, 255-rgb[0]);    
    analogWrite(pin_g, 255-rgb[1]);    
    analogWrite(pin_b, 255-rgb[2]);   
  }
 
}

El valor del PWM lo fijamos mediante la función analogWrite(pin, valor) donde valor es un número entre 0 y 255. Al estar utilizando un diodo de ánodo común, es necesario "invertir" los valores de cada color para que se correspondan con el código RGB normal y corriente.

Finalmente, la comunicación desde una aplicación de C# no podría ser más sencilla. Basta con escribir un programa similar a este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System.IO.Ports;
 
namespace Ardu1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void enviar_Click(object sender, EventArgs e)
        {
            char valor_r = (char)rojo.Value;
            char valor_g = (char)verde.Value;
            char valor_b = (char)azul.Value;
            string cadena = valor_r.ToString() + valor_g.ToString() + valor_b.ToString();
 
            SerialPort port = new SerialPort("COM3", 9600);
            port.Open();
            port.Write(cadena);
            port.Close();
        }
    }
}

Este código es parte de una Aplicación basada en formularios, que tal y como se aprecia en el vídeo permite controlar el color del diodo tanto a partir de su código RGB como desplegando un menú de selección de color.