Como se pode comunicar com o Arduino através de um computador e recorrendo à linguagem C#? O objectivo é fazer uma coisa com este aspecto:
Antes de mais nada instale a versão gratuita do Microsoft Visual C# Express (a Microsoft também tem coisas boas!).
A idéia principal do programa é enviar uma 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 ação. Descreve-se aqui o exemplo mais simples que é acender e apagar um LED!
Por forma a simplificar o "protocolo" de comunicação a informação transmitida é constituída apenas por caracteres. Um caracter corresponde a uma determinada ação. Descreve-se aqui o exemplo mais simples que é acender e apagar um LED!
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 cria o projecto. Para adicionar o código a cada um destes componentes basta clicar duas vezes em cima de cada um.
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 cria o projecto. Para adicionar o código a cada um destes componentes basta clicar 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 possa comunicar-se através da porta Serial tem 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 souber em que porta está ligado o Arduino clica com o botão direito do mouse no "Meu Computador", "Propriedades" e em "Gerenciador de Dispositivos". Aí, encontrará essa informação.
Para definir a baud rate utiliza o seguinte código:
Para que possa comunicar-se através da porta Serial tem 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 souber em que porta está ligado o Arduino clica com o botão direito do mouse no "Meu Computador", "Propriedades" e em "Gerenciador de Dispositivos". Aí, encontrará essa informação.
Para definir 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 definir a porta serial bem como efetuar a sua abertura, utiliza o seguinte código:
Para definir a porta serial bem como efetuar 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 exceção que possa ocorrer na abertura da porta Serial.
Por fim, para enviar uma mensagem para o Arduino utiliza o seguinte código:
Por fim, para enviar 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 envia. 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 enviar um caracter '1' o LED ligado no pino 13 se acende e que se enviar um caracter '0' o LED fica desligado.
Concluindo... C# é uma excelente linguagem para, com poucas linhas e em pouco tempo, se fazer 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.
LINKS P/ PROGRAMAS COMPILADOS: Concluindo... C# é uma excelente linguagem para, com poucas linhas e em pouco tempo, se fazer 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.
TalkToArduino C# source code
TakToArduino.pde
Créditos, http://bravomofo.blogspot.com/2009/12/talk-to-arduino-with-c.html
Amigo, sempre desenvolvi usando c#, agora estou precisando desenvolver com arduino. Vi que existe o netduino so que o mesmo tem apenas 4 ou 5 portas pwm sendo que precisarei de mais ou menos 10. Vi que existe o mega arduino so que não conheço muito c e tenho muita experiencia em desenvolvimento para windows phone usando .net c#. Tem alguma possibilidade de aumentar as portas pwm de um arduino, faço essa pergunta pois se der para aumentar do arduino, provavelmente aumento a do netduino. Sabe se existe mega netduino? meu e-mail é wisedf no hotmail se pode me responder por la fico grato.
ResponderExcluir