Linux / PHP / Java / Designer

As melhores dicas estão aqui.

Comunicar Arduino com C#

| 0 comentários

Vamos criar um simples projeto que tem como objetivo controlar nosso Arduino através de uma aplicação em C#.

Esta é uma cópia oficial da matéria publicada em: http://www.satellasoft.com/materia/comunicar-arduino-com-csharp

Mais matéria em: www.satellasoft.com/categoria/arduino

 

Alguns programadores querem desenvolver alguma aplicação com Arduino que se possa controlar através de um Software, isto é muito fácil, o que você pode não saber é a sintaxe e os meios que serão utilizados para isso.

Tanto o Arduino quanto o C# trabalha com portas Serial, ambos lê e envia dados um para o outro.

Aqui vamos criar um simples projeto que tem como objetivo ligar e desligar uma lâmpada, o Arduino tem suas próprias funções para isso, elas estão logo abaixo:

Serial.begin(); - Inicia a porta serial com uma determina taxa de comunicação entre nossa aplicação e o Arduino, por padrão utilizaremos 9600 bps.  Esta função deve estar antes de qualquer coisa.

Serial.available(); -  Esta função fica na escuta, ela verifica se foi enviado algum dado para o Arduino.

Serial.read();  - Esta função é responsável por ler os dados que foram recebidos, aqui vamos guardar estes dados em uma variável.

Serial.write(); - Se necessitarmos enviar algum dado do Arduino para o computador vamos utilizar esta função, aqui nesta matéria não vamos precisar enviar nenhum dado.

 

Agora vamos a nossa aplicação em C#, primeiramente vamos conhecer o que vamos utilizar aqui.

Vamos utilizar uma porta serial, pois será através dela que vamos nos comunicar com o Arduino. Esta porta necessita do numero da COM na qual o Arduino esta conectado, necessita também do Bound Rate que é a taxa de transferência de dados, vamos utilizar 9600bps.

Nossa porta serial também tem algumas funções que são elas:

Open(); - Esta função abre uma conexão com  aporta especifica junto com a taxa de transferência, caso a porta especificada não tenha nenhum dispositivo vai dar  erro.

Write(); - Esta é a função que vamos utilizar para enviar os dados para o Arduino através da porta COM especificada.

Close(); - Esta função fecha a conexão com a porta COM especificada, utilizaremos quando a aplicação for fechada.

Vamos começar nossa aplicação, para isso crie um Novo Windows Form e arraste um botão para ele, personalize seu projeto como você achar que fica melhor.

Descrição: C:\Users\Gunner Correa\Desktop\Comunicar Arduino com C#\arduinocomunicacao01.jpg

Arraste também um Serial Port, altere o nome dele para porta.

Descrição: C:\Users\Gunner Correa\Desktop\Comunicar Arduino com C#\arduinocomunicacao02.jpg

Nas propriedades do nosso objeto porta faça as seguintes alterações:

BoundRate9600.
PortNameCOM3(Aqui é a posta que seu Arduino deve estar conectado).

Descrição: C:\Users\Gunner Correa\Desktop\Comunicar Arduino com C#\arduinocomunicacao03.jpg

De um duplo clique no formulário para abrir o Evento Load, dentro deste Evento vamos verificar se o Arduino estiver conectado, se não tiver vamos fechar o formulário. Insira o seguinte código:

try
{
porta.Open();//Abre uma conexão com a
porta especificada
}
catch (Exception) {//Se houver um erro ele
vamos trata-lo
MessageBox.Show("O dispositivo não
esta na porta especificada!");//Exibimos uma mensagem
informando do erro.
this.Close(); //Fechamos nossa
aplicação
}

Agora em seu botão,  coloque o nome para ele de btnPress e defina uma cor, aqui utilizamos Salmon  e o tamanho dele ocupa quase todo form.

O Arduino espera um Objeto do tipo Byte ou até mesmo um char, mas aqui vamos criar um Objeto do tipo Byte, dele devemos atribuir os valores que vamos passar para o Arduino, vamos criar também uma variável do tipo bool que vai manipular nosso botão.

byte[] dados = { 0, 1 }; //Objeto do tipo Byte, com
os valores 0 e 1.
bool press = false; // variável do tipo bool
com valor false.

Observe que estamos atribuindo dois valores para nosso objeto, 0 e 1, no Arduino vamos verificar qual valor foi recebido e fazer as execuções, este valores podem ser qualquer um, e quantos você precisar, aqui usei dois valores e 0 e 1, nada que ele só aceite números binários.

De um duplo clique no botão e insira o seguinte código:

if(press == false){
porta.Write(dados, 0, 1);//Imprimimos
a matriz de byte, passamos o valor e a quantidade de
Bytes a ser escrito
this.btnPress.BackColor = Color.Beige;
//Trocamos a cor do nosso botão.
this.btnPress.Text =
"Pressed";//Alteramos o texto do nosso botão.
press = true;//Definimos a variável
press como true.
}else{
porta.Write(dados, 1, 1);//Imprimimos
a matriz de byte, passamos o valor e a quantidade de
Bytes a ser escrito
this.btnPress.BackColor =
Color.Salmon;//Trocamos a cor do nosso botão.
this.btnPress.Text =
"Press";//Alteramos o texto do nosso botão.
press = false;//Definimos a variável
press como true.
}

O código esta todo comentado por isso não vou explicar nada, apenas a parte que envia os dados para o Arduino.  porta.Write(dados, 1, 1);.
porta.Write(); já sabemos que envia informações para o Arduino, o primeiro parâmetro é a matriz que contém os dados, no nosso caso a matriz que armazena estes dados são o objeto dados, o Segundo parâmetro informa a posição que meu dado esta dentro da matriz dados, na posição 1 da matriz dados temos o valor1, o ultimo parâmetro é a quantidade de Bytes que vamos escrever, no nosso caso vamos escrever apenas um Byte.

Para finalizar nossa aplicação vá até o evento Form Closing do nosso formulário e de um duplo clique. Este evento é chamado quando fechamos nossa aplicação, dentro dela vamos definir para fechar a conexão com a nossa porta, porém nada impede que o usuário remova o Arduino antes mesmo de fechar a aplicação, isso gera um erro, então devemos tratar este erro.

Descrição: C:\Users\Gunner Correa\Desktop\Comunicar Arduino com C#\arduinocomunicacao04.png

Insira o seguinte código:

try//Tenta
{
if (porta.IsOpen)//Verifica se a porta
esta aberta
{
porta.Close();//Fecha a porta
}
}
catch (Exception) //Se houver erros
{ }

Primeiros verificarmos se a porta esta aberta, se estiver nos fechamos ela  através de função close();.

Com isso já terminamos nossa aplicação, agora vamos para a parte final do nosso projeto, vamos ao nosso Arduino.

char dado = '0'; //Criamos uma variável do tipo char e armazenamos o valo 0.
void setup() {
Serial.begin(9600); //Abrimos uma conexão serial com 9600bps
pinMode(8, OUTPUT);//Definimos o pino 8 como saída
}

void loop() {

if(Serial.available() > 0){ //Verificamos se recebeu algum dado e se recebeu é maior que 0
dado = Serial.read(); //Armazena o dado recebido
}
if(dado == 0){// Verificamos se o dado recebido é 0
digitalWrite(8, HIGH);//Liberamos 5V na saída 8 do Arduino.
}else if(dado == 1){//Verificamos se o dado recebido é 1
digitalWrite(8, LOW);//Cortamos a Energia do Arduino na porta 8, 0V
}

O código esta todo comentado e é bem simples, não tem como fazer qualquer explicação do mesmo, o que acontece neste código é iniciar a transmissão serial, verificar o dado recebido e armazenar numa variável, verificar o valor do dado e executar X função.

Agora basta executar seu projeto e ver sua lâmpada acendendo e apagando, você pode fazer Download de todo o código deste projeto no botão baixo, se gostou comente, se tem duvidas comente também.

Espero que tenham aprendido e acima de tudo, entendido toda a funcionalidade desta comunicação, se caso você precisar de um Software deste tipo e que atenda mais as sua necessidades, gere um log, tenha um temporizador além de outras funcionalidades não deixe de conferir o Arduino Run.

Arduino Run Link: http://www.satellasoft.com/materia/arduino-run

 

Download

No vídeo abaixo você pode conferir o Resultado final desta aplicação.

Deixe uma resposta

Campos requeridos estão marcados *.