Por medio del puerto serie, esta interfaz enviá un número de 10 cifras al Arduino ( 1Cifra simbólica, 3 cifras Rojo, 3 cifras Verde y 3 cifras Azul), cuando este lo recibe identifica cada cifra y escribe su correspondiente valor de cada color en su pin.
El número que enviá se calcula de esta manera ( 1.000.000.000 + Canal R* 1.000.000 + Canal G* 1.000 + Canal B)

Código Visual Basic:
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SerialPort1.BaudRate = 9600
SerialPort1.DataBits = 8
SerialPort1.Parity = IO.Ports.Parity.None
SerialPort1.StopBits = IO.Ports.StopBits.One
SerialPort1.PortName = "COM3"
SerialPort1.Open()
TextBox_R.Text = 0 'Valor inicial canal R (entre 0-255)
TextBox_G.Text = 0 'Valor inicial canal G (entre 0-255)
TextBox_B.Text = 0 'Valor inicial canal B (entre 0-255)
TextBox_RGB.Text = 0 'Valor inicial RGB ( 1000000000 + R*1000000 + G*1000 + B)
'El 1000000000 es para forzar a RGB a que tenga una cifra constante (por si el canal R es menor de 100 0 10)
End Sub
Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar_R.Scroll
TextBox_R.Text = TrackBar_R.Value
End Sub
Private Sub TrackBar2_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar_G.Scroll
TextBox_G.Text = TrackBar_G.Value
End Sub
Private Sub TrackBar3_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar_B.Scroll
TextBox_B.Text = TrackBar_B.Value
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EnviarDatos.Click
TextBox_RGB.Text = 1000000000 + TextBox_R.Text * 1000000 + TextBox_G.Text * 1000 + TextBox_B.Text
SerialPort1.Write(TextBox_RGB.Text)
End Sub
End Class
Código Arduino:
// By: jsslxs
// 15 de Desembre 2013
int ledR= 8; //Led rojo
int ledG= 9; //Led verde
int ledB= 10; //Led azul
void setup()
{
pinMode(ledR,OUTPUT);
pinMode(ledG,OUTPUT);
pinMode(ledB,OUTPUT);
Serial.begin(9600); //Inicio puerto serie
}
void loop()
{
int val, r, g, b;
if (Serial.available())
{
delay(100); //Espera 100ms
while (Serial.available ()>9) // ejemplo datos recibidos: 1 255 166 094
{
val=Serial.read();
int numser[8] = {0,0,0,0,0,0,0,0}; //matriz de bytes
for (int i = 0; i < 9; i = i++) // El primer dato es un 1 simbólico, no lo guardo
{
numser[i]= Serial.read();
}
int num0 = numser[0]-'0'; //Rojo 255
int num1 = numser[1]-'0';
int num2 = numser[2]-'0';
r= num0*100+ num1*10 + num2;
int num3= numser[3]-'0'; //Verde 166
int num4 = numser[4]-'0';
int num5 = numser[5]-'0';
g= num3*100+ num4*10 + num5;
int num6 = numser[6]-'0'; //Azul 094
int num7= numser[7]-'0';
int num8= numser[8]-'0';
b= num6*100+ num7*10 + num8;
color( r, g, b); //Llamo a la función color
//Serial.write(num3+'0');
//Serial.write(num4+'0');
//Serial.write(num5+'0');
}
Serial.flush();
}
}
void color(int rojo, int verde, int azul)
{
//Escritura de PWM del color Rojo
analogWrite(ledR, rojo);
//Escritura de PWM del color Verde
analogWrite(ledG, verde);
//Escritura de PWM del color Azul
analogWrite(ledB, azul);
}
Descargar proyecto: http://www.4shared.com/zip/ucIrUOIm/Control_LedRGB.html

