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.