Comunicar Arduino com Csharp

Gunnar CorreaGunnar Correa17/03/2015 às 09:48:55 - 14.169 acessos

Simples projeto que tem como objetivo controlar o Arduino através de uma aplicação C#.


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 manipulação da porta serial, 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 outra.

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.

 

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  a porta especificada, junto com a taxa de transferência, caso a porta especificada não tenha nenhum dispositivo vai dar imprimir um 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 projeto Windows Form e arraste um botão para ele, personalize seu projeto como você quiser.

Comunicando Arduino com C# - Criando a interface no Visual Studio

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

C# serial port com Arduino

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

BoundRate: 9600.
PortName: COM3(Aqui é a porta que seu Arduino deve estar conectado).

Ajustando o BoundRate e PortName no C#.

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

Código 01:

try
{
	porta.Open();//Abre uma conexão com a porta especificada
}
catch (Exception) {//Se houver um erro elevamos 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, atribua o nome 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, nele 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.

Código 02:

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, 0 e 1.

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

Código 03:

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.
}

porta.Write(); já sabemos que esta função envia informações para o Arduino, o primeiro parâmetro é a matriz que contém os dados, no nosso caso, a vetor que armazena estes dados são o objeto dados, o segundo parâmetro informa a posição que meu dado esta dentro do vetor dados, na posição 1 do vetor dados temos o valor 1, 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.

Evento FormClosing no C# Visual Studio

Insira o seguinte código.

Código 04:

try
{
	if (porta.IsOpen)//Verifica se a portaesta 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 projeto, vamos ao nosso Arduino.

Código 05:

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 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.

 


Arduino GUI C# aplicação PIC Visual Studio 2013 Serial Porta 9600 Byte posições Protoboard Hardware Comunicação

Compartilhe nas redes sociais



Gunnar Correa

Gunnar Correa

Autodidata, Graduado em Desenvolvimento Web, Especialista em Tecnologias na Educação e Pós-graduando em Segurança da Informação. Começou seus estudos na área de programação quando era criança, e atualmente, está estudando desenvolvimento de jogos. É CEO do portal SatellaSoft, criado em 2009 com o intuito de compartilhar conhecimento de forma gratuita e inédita.