Manual
do
Maker
.
com
No artigo anterior sobre o HC12 mostrei como fazer a comunicação básica entre 2 Arduino Leonardo. Agora vamos fazer uma brincadeira diferente, enviando comandos do computador para o Arduino sem utilizar comunicação serial, apenas o rádio conectado ao computador (seja desktop ou notebook) através de um adaptador FTDI.
Como o Arduino não estará conectado ao computador após subir o sketch, precisamos de algum feedback para saber se realmente o comando foi recebido. Vamos utilizar o LED built-in que está no pino 13.
Acompanhou os primeiros tutoriais de Qt? Tem alguns vídeos em nosso canal no Youtube, além dos artigos relacionados. Mas não se preocupe muito, caso tenha o Qt instalado. Se não tiver, preocupe-se um pouco e instale-o. Ele é gratuito e a IDE de desenvolvimento é magnifica; você pode escrever tudo em C++ puro ou utilizar os recursos oferecidos pelo framework, com a liberdade que nenhum outro framework lhe dará.
Para agilizar ainda mais esse tutorial, vá ao nosso repositório no github e clone o projeto desse link. Se ainda não utilizou a biblioteca QtSerialPort, então deverá instalá-la à parte. Sorry, mas meus tutoriais são sempre executados em Linux, portanto, ou você instala o Linux nativamente, ou em uma VM, ou então procure no Google como instalar o QtSerialPort em outro sistema. No Linux, basta executar:
sudo apt-get install libqt5serialport5-dev
Abrindo o projeto recém clonado, Já é possível rodá-lo simplesmente utilizando a combinação Ctrl+R.
Esse programinha foi criado em poucos minutos e caso queira saber como foi feita, você pode iniciar desse vídeo. Para facilitar ainda mais, façamos o seguinte, apenas adicionaremos um botão para ligar e desligar o LED built-in do Arduino.
Já temos um projeto pronto para uso, no qual adicionaremos um botão e um slot para o botão, não tem mistério.
Basicamente o que fiz foi adicionar o slot changeLED, contendo o seguinte código:
void MainWindow::changeLED()
{
this->serialPort->write("*\n");
}
O protótipo do método fica no header sempre. Basta descer até a seção public slots e adicionar:
void changeLED();
E a conexão com o novo botão, no construtor da classe, onde já tem um connect :
connect(ui->pushButtonLED,SIGNAL(clicked(bool)),this,SLOT(changeLED()));
Ao clicar no botão, ele enviará um asterisco via serial para o rádio, conectado por FTDI ao computador. O rádio transmitirá esse valor e o Arduino se encarregará de mudar o status do LED a cada Serial.available(), sem maiores tratamentos. Eis um blink.
Aproveitei o Arduino Leonardo que já estava pronto para uso devido ao artigo anterior, mas fique à vontade para usar qualquer coisa que deseja, uma vez que tudo o que precisa fazer com esse rádio é uma comunicação serial em 9600 bauds.
O código é basicamente isso:
bool stat = false;
void setup(){
Serial.begin(9600);
Serial1.begin(9600);
pinMode(13,OUTPUT);
}
void loop(){
if (Serial1.available()){
stat = !stat;
digitalWrite(13,stat);
Serial.println(".");
}
delay(100);
}
Desse jeito mantemos o blink graças ao comando Serial.print(), mas se quiser apenas acender ou apagar, basta tirar essa linha e assim será necessário clicar novamente no programa de comunicação serial feito em Qt para mudar o estado do pino.
Fiz um vídeo de alguns segundos apenas para mostrar o funcionamento.
Com essa prova de conceito, já fica claro que mandar comandos do computador para o Arduino através de rádio é uma tarefa simples, utilizando um HC12 para tal.
Pretendo escrever mais um ou dois tutoriais relacionados, espero que acompanhe e até a próxima!
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.