Mostrando entradas con la etiqueta Led RGB. Mostrar todas las entradas
Mostrando entradas con la etiqueta Led RGB. Mostrar todas las entradas

domingo, 15 de diciembre de 2013

Control de Led RGB con Visual Basic y Arduino

Los valores de cada canal están comprendidos entre 0-255 por tanto en decimal tienen 3 cifras.
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