Comunicar Arduino com Csharp

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

Construindo modelos arquitetônicos com Blender 3D

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.

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

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

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.

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.