C# y Arduino – Aplicacion para Controlar Led RGB

C# y Arduino – Aplicacion para Controlar Led RGB

En este Articulo veremos como controlar un led Rgb conectado a una placa arduino y esta a su vez conectada a la PC con el cable USB, el control del led se realizara con una aplicacion realizada en C# con Monodevelop en Linux, aunque es igual que por ejemplo programarlo en Visual C# en windows solo cambian algunas cosas que especificaremos aqui. Antes en este Blog hemos realizado un Articulo sobre el control de un led rgb mediante arduino y bluetooth aqui, este Articulo a peticion de un lector, es similar aunque en vez de controlarlo con bluetooth programaremos una aplicacion en C# para controlar cada valor de intensidad de los 3 colores del led mediante usos de barras de desplazamiento. Veamos entonnces como trabajar con C# y Arduino…

Requerimientos

Lo primero que haremos sera programar el arduino para recibir los valores de intensidad de los 3 colores que enviaremos desde la aplicacion en C#, esta informacion enviada sera del formato RGB, por ejemplo 255255255 255000123 000000000, una cadena de 9 digitos correspondientes los primeros 3 al color rojo, los siguientes 3 al color verde y los ultimos 3 al color azul, el programa arduino descompondra estos caracteres en los 3 grupos y enviara el correspondiente valor al pin conectado en ese pin del led rgb.


// Relacion Pines arduino - termianles de nuestro led
int rojo = 11;
int verde = 10;
int azul = 9;

void setup()
{
  pinMode(rojo,OUTPUT);
  pinMode(verde,OUTPUT);
  pinMode(azul,OUTPUT);
   Serial.begin(9600);
   Serial.println("Controlar LED RGB mediante Aplicacion C# y Arduinon JonathanMelgoza.com/BLOG");
   delay(1000);
}

String color = "";
int c = 0;
void loop()
{
   while (Serial.available())
   {
       char dato= Serial.read();
       color += dato;
       c++;
       if(c==9){
         int r = color.substring(0,3).toInt();
         int g = color.substring(3,6).toInt();
         int b = color.substring(6,9).toInt();
         setColor(r,g,b); 
         color = "";
         c=0;  
       }      
   }
}

void setColor(int red, int green, int blue)
{
  analogWrite(rojo, red);
  analogWrite(verde, green);
  analogWrite(azul, blue);  
}

Ahora que nuestro arduino esta programado para recibir los valores de intensidad hay que enviarlos de alguna forma, para esto programaremos una aplicacion en C# que controle la intensidad de color de cada pin.


using System.IO.Ports;

Contiene recursos para el manejo de puerto serial


SerialPort serial;
serial = new SerialPort();
serial.PortName = "/dev/ttyACM0";
serial.BaudRate = 9600;
try{
	serial.Open();
}catch(Exception err){
	MessageBox.Show("No se pudo conectar a el puerto especificadon"+err,"Error");
}

Creamos un nuevo objeto serialport, establecemos el nombre del puerto al que esta conectado nuestro arduino, el baudrate y abrimos conexion.


Suscríbete!

Suscríbete a nuestra lista de correo y recíbe los últimos contenidos directamente en tu bandeja de correo electrónico, puedes elegir únicamente de que categoria del blog quieres recibir contenido.

Suscríbeme

En windows el nombre del puerto cambia, por ejemplo COM3 o COM6

Ahora agregamos 3 Scrollbar horizontales, pueden ser tambien trackbars, y agregamos los eventos onValueChanged


protected void OnOsScrollbarValueChanged (object sender, EventArgs e)
{
	entry3.Text = Convert.ToString(Convert.ToInt16(OsScrollbar1.Value)).PadLeft(3,'0');
	enviarColor();
}	

protected void OnOsScrollbar2ValueChanged (object sender, EventArgs e)
{
	entry4.Text = Convert.ToString(Convert.ToInt16(OsScrollbar2.Value)).PadLeft(3,'0');
	enviarColor();
}	

protected void OnOsScrollbar3ValueChanged (object sender, EventArgs e)
{
	entry5.Text = Convert.ToString(Convert.ToInt16(OsScrollbar3.Value)).PadLeft(3,'0');;
	enviarColor();
}

entry3 4 y 5 son cuadros de texto donde se almacena el valor de cada barra.
PadLeft se utiliza para rellenar de ceros a la izquierda cuando el valor se de 2 o 1 digito y asi completar los 9 caracteres.

Todas llaman al metodo enviarColor(), que envia al puerto la cadena de color.(255255255,000000000,255000111, recuerdas?)


public void enviarColor(){
	String r = entry3.Text;
	String g = entry4.Text;
	String b = entry5.Text;
	serial.Write(r+g+b);
}

Serial.write escribe en el puerto y enviamos la cadena.

Nosotros ademas pusimos un boton para encender y apagar el led, por si te interesa el codigo del evento del boton es el siguiente


protected void OnButtonONOFFClicked (object sender, EventArgs e)
{
	if (label2.Text == "LED RGB Apagado.") {
		serial.Write ("255255255");
		OsScrollbar1.Value = 255;
		OsScrollbar2.Value = 255;
		OsScrollbar3.Value = 255;
		label2.Text = "LED RGB Encendido.";
		OsScrollbar1.Sensitive = true;
		OsScrollbar2.Sensitive = true;
		OsScrollbar3.Sensitive = true;
	} else {
		serial.Write("000000000");
		OsScrollbar1.Value = 0;
		OsScrollbar2.Value = 0;
		OsScrollbar3.Value = 0;
		label2.Text = "LED RGB Apagado.";
		OsScrollbar1.Sensitive = false;
		OsScrollbar2.Sensitive = false;
		OsScrollbar3.Sensitive = false;
	}
}

c# y arduino 01
c# y arduino 1

También puedes ver como programar tu arduino desde el navegador en linux.

Clic para valorar esta información
[Total: 0 Promedio: 0]