Talk To Arduino with C#

Vou aproveitar este post para dar uma ideia de como se pode comunicar com o Arduino através de um computador e recorrendo à linguagem C#. O objectivo é fazer uma coisa com este aspecto:

Convém dizer que não sou nenhum expert em C#, antes pelo contrário, pelo que, se fores um entendido e encontrares alguma coisa que aches obscena, dá um desconto! (e comunica que assim todos aprendemos)

Antes de mais instala a versão gratuita do Microsoft Visual C# Express (a Microsoft também tem coisas boas!)

A ideia principal do programa é enviar informação através da porta serial à qual está ligado o Arduino. Em rigor, o Arduino está ligado ao computador através de USB mas como tem um conversor USB-Serial, abstraímos-nos do USB e falamos apenas da ligação Serial.
Por forma a simplificar o "protocolo" de comunicação a informação transmitida é constituída apenas por caracteres. Um caracter corresponde a uma determinada acção. Descreve-se aqui o exemplo mais simples que é acender e apagar um LED.

Vamos então ao código!

Abre o Microsoft Visual C# Express e faz File>New>Project e na tab Visual C# escolhe "Windows Forms Application".
Vais precisar de uma TextBox, um Button, duas Labels, duas ComboBoxes e uma SerialPort. Arrasta cada um desses compotentes para a Form1 que é criada assim que crias o projecto. Para adicionar código a cada um destes componentes basta clicares duas vezes em cima de cada um.

Só vou listar aqui as duas partes de código que considero mais importantes. O código na íntegra está disponível no fim deste post.

Para que possas comunicar através da porta Serial tens que definir, pelo menos, duas coisas: a taxa de transferência de dados (BAUD RATE) e a porta em que está ligado o Arduino (por ex: COM7). Se não souberes em que porta está ligado o Arduino clica com o botão direito do rato no "O Meu Computador", "Propriedades" e em "Gestor de Dispositivos". Aí, encontras essa informação.

Para definires a baud rate utiliza o seguinte código:


private void baudrate_combobox_SelectedIndexChanged(object sender, EventArgs e)
{
serialPort.BaudRate = Convert.ToInt16(baudrate_combobox.Text);
}
O valor escolhido para a baud rate tem de corresponder ao utilizado pelo Arduino.

Para definires a porta serial bem como efectuares a sua abertura, utiliza o seguinte código:

private void port_combobox_SelectedIndexChanged(object sender, EventArgs e)
{
serialPort.PortName = port_combobox.Text;

try
{
serialPort.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

As funções try/catch previnem o programa de qualquer excepção que possa ocorrer na abertura da porta Serial.

Por fim, para enviares uma mensagem para o Arduino utiliza o seguinte código:

private void send_button_Click(object sender, EventArgs e)
{
try
{
serialPort.Write(message_textbox.Text);
message_textbox.Text = "";
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,"ERROR",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
Por sua vez vais precisar de enviar código para o Arduino por forma a que este fique à espera e reconheça os comandos (caracteres, neste caso) que lhe envias. Assim faz o upload do seguinte código:

#define BAUD_RATE 9600
#define ledPin 13

char incomingChar;

void setup()
{
pinMode(ledPin, OUTPUT);

// serial communication
Serial.begin(BAUD_RATE);
}

void loop()
{
if(Serial.available() > 0){

incomingChar = Serial.read();

//your protocol goes here
switch(incomingChar){
case '1':
// led is ON
digitalWrite(ledPin, HIGH);
break;
case '0':
// led is OFF
digitalWrite(ledPin, LOW);
break;
}
}

O que é que este código quer dizer? Quer dizer que se enviares um caracter '1' o LED ligado no pino 13 se acende e que se enviares um caracter '0' o LED fica desligado.

Concluindo... C# é uma excelente linguagem para, com poucas linhas e em pouco tempo, se fazerem umas brincadeiras interessantes. Mais. O que se tentou aqui fazer foi, nada mais nada menos, do que algo que já existe no Arduino IDE desde a sua versão 0017. Ainda assim, espero que tenha sido do teu agrado.

Downloads:
TalkToArduino C# source code
TakToArduino.pde


Mais informação:
C# na wikipedia
Arduino webpage
Microsoft Visual C# Express

Bookmark and Share

0 comentários: