Controlar Arduino con C# y el puerto serie


arduino-con-csharp

Cuando vimos el uso del puerto serie en Arduino en esta entrada, ya adelantamos que era el medio principal del que disponíamos para comunicación con Arduino con otros dispositivos.

Esta comunicación tienen la ventaja de que puede ser realizada con gran variedad de dispositivos (como un ordenador, un tablet, un móvil), es independiente del sistema operativo (incluyendo Windows, Linux, Mac y Android) y puede realizarse en multitud de lenguajes de programación.

En esta entrada vamos a aprender a conectar Arduino con C#, el popular lenguaje de programación de Microsoft, que dispone de forma nativa objetos para usar de forma muy sencilla los puertos de serie.

Para ello es necesario tener instalado Visual Studio, el IDE de Microsoft. La versión “Community” es gratuita para uso personal, y puede ser descargada desde este enlace.

Anuncio:

La comunicación puede realizarse tanto por cable como de forma inalámbrica por bluetooth, como vimos en la entrada Conectar Arduino por Bluetooth con los módulos HC-05 ó HC-06

Para ver la forma de conectar Arduino con C# vamos a ver dos ejemplos sencillos, los mismos que vimos en la entrada Comunicación de Arduino con puerto serie. Pero esta vez realizaremos la comunicación desde un programa desarrollado en C#, en lugar de usar el Serial Monitor del IDE de Arduino.

El código de C# que vamos a mostrar es muy sencillo (casi me da vergüenza publicarlo) porque son ejemplos para ilustrar lo fácil que es usar el puerto serie para conectar Arduino con C#. Pero tener en cuenta que en un proyecto real deberíamos incluir algunas mejoras.

Por ejemplo, el uso del puerto serie estaría integrado en nuestros objetos y tendríamos independencia entre capa visual y modelo. Además, normalmente transmitiríamos bytes en lugar de texto, e incluiríamos verificaciones para asegurar que la transmisión se ha realizado correctamente.

Vemos esto en futuras entradas pero, de momento, nos conformamos con aprender a usar lo básico de los puertos de serie para comunicar Arduino con C#.

También puedes usar Visual Studio para programar Arduino directamente, como vimos en la entrada
El mejor IDE para Arduino, Visual Studio con Visual Micro

Encender y apagar un LED

En este ejemplo vamos a hacer un formulario simple con dos botones de ON y OFF, que nos permitirán encender el LED integrado en la placa de Arduino, conectado al Pin13.

En primer lugar arrancamos Visual Studio, y creamos un nuevo proyecto de C#. Para ello pulsamos en File/New/Project.

Elegimos el template “Windows Form Application”, la ubicación en la que queremos guardarlo en nuestro disco duro y como nombre del proyecto “BasicSerialPort”.

arduino-chsarp-1

Se abrirá un formulario vacio, que será la ventana principal de nuestro ejemplo. Arrastramos desde el Toolbox dos botones hasta nuestro formulario, y los ponemos uno encima del otro.

arduino-chsarp-2

Ahora empleamos la barra de propiedades para cambiar el texto y el nombre tanto de los botones como del formulario.

arduino-chsarp-3

Dejamos los valores como muestra la siguiente tabla.

ElementoNameText
FormulariofrmMainBasic C#
Boton ONbtOnON
Boton OFFbtOffOFF

Ahora, pulsamos F7 encima del formulario para acceder al código (o pulsamos con el botón derecho y elegimos “View code”).

arduino-chsarp-4

Reemplazamos todo el código por el siguiente.

Recuerda sustituir el puerto serie del código, en el ejemplo “COM4”, por el puerto serie en el que tengas conectado Arduino.

Ahora cargamos este programa en Arduino.

Ejecutamos el programa pulsando F5. Pulsamos los botones, y veremos que se enciende y se apaga el LED integrado de Arduino.

Hacer parpadear un LED

Vamos a modificar el programa anterior para enviar un número de 0 a 9 a Arduino. Arduino recibirá ese número, y hará parpadear el LED integrado el número de veces recibido.

Para ello comenzamos modificando el formulario del ejemplo anterior. Eliminamos uno de los dos botones y arrastramos desde la Toolbox un nuevo Textbox.

arduino-chsarp-5

Usamos la paleta de propiedades para modificar las propiedades del Textbox y el botón restante. Dejamos los valores según la siguiente tabla.

ElementoNameText
FormulariofrmMainBasic C#
Boton SendbtSendSend
TextboxtxNumber

Ahora editamos el código del formulario, y lo sustituimos por el siguiente.

Cargamos este programa en Arduino.

Ejecutamos el programa en Visual Studio pulsando F5. Al introducir un número entre 0 y 9, veremos como el LED de la placa parpadea el número de veces indicado.

Hasta aquí una primera presentación de comunicación de Arduino con C#. En el futuro emplearemos métodos más avanzados para manejar servos y robots.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección Tutoriales de Arduino

Anuncio:

Previous El mejor IDE para Arduino. Visual Studio con Visual Micro
Next Nuestro primer programa en Python
1000
5 Comment threads
4 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
7 Comment authors
newest oldest
Adrian Ramirez n.n

muy padre, no podras hacer un ejemplo pero con MR522 ?

luisllamas

Supongo que te refieres al lector RFID MRC522.
Tienes el tutorial aquí https://www.luisllamas.es/arduino-rfid-mifare-rc522/
Un saludo!

Miguel

¿Qué sentido tiene el código para la vinculación de eventos?, en el lenguaje c# es innecesario cuando ya estas asignando el código de cada tecla, este responderá al evento sin necesidad de nada mas

Perla Elizabeth Jimarez Rocha

Hola! tienes al libreria de Arduino para cominucar con C#? puedes poner algun tutoria de como instalarlo hehe gracias! tu pagina es muy buena 😀

luisllamas

Dentro de unas pocas entradas quiero compartir una librería para comunicación Arduino con C#. Pero sera de la zona de tutoriales avanzados osea que… ¡no va a ser tan fácil como esta entrada! Espero que te guste

Bladimir

Cómo seria para hacer un contador ascendente y descendente con display de 7 segmentos que se controlen por botones virtuales en C#?

Rolando

y para recivir datos del puerto serial? a c# como se le puede hacer

Kristian

como puedo encender varios leds, no, al mismo tiempo, si no cuando yo lo requiera