Vimos num outro artigo como criar programas no Arduino IDE e transferi-los para a placa do Arduino através da ligação USB. Esta característica torna muito fácil a programação do Arduino, sem ser necessária a utilização de programadores externos, como acontece com outros microcontroladores. Neste artigo iremos um passo à frente nas potencialidades da ligação USB, utilizando-a para criar uma comunicação bi-direccional entre o Arduino IDE e a placa Arduino. Para além do Arduino IDE, a comunicação pode ser feita através de qualquer aplicação que tenha possibilidade de comunicação série.
Apresentar informação enviada pelo Arduino
A forma mais simples de utilizar a porta USB é escrever um programa que envie uma mensagem a partir do Arduino e essa mensagem seja apresentada num programa terminal. Acontece que o próprio Arduino IDE já tem um monitor série que pode ser aproveitado, conforme se mostra na imagem.
![](https://i0.wp.com/bitsebytes.pt/wp-content/uploads/2021/09/Arduino_Monitor.png?resize=745%2C603&ssl=1)
![](https://i0.wp.com/bitsebytes.pt/wp-content/uploads/2021/09/Arduino_Monitor2.png?resize=733%2C313&ssl=1)
Para escrever no monitor a informação enviada pelo Arduino, termos de utilizar três funções básicas:
- Serial.begin (baud_rate)
- Serial.print (“Mensagem”)
- Serial.println (“Mensagem”)
em que baud_rate e Mensagem são definidos pelo programador.
A função Serial.begin() deve ser chamada na função setup(), para iniciar a porta USB, para comunicação. A partir daí, é possível utilizar tanto a função Serial.print(), como a função Serial.println(). A diferença entre a duas é somente o facto de que a segunda função acrescenta um fim de linha à mensagem, de modo que a próxima mensagem será escrita na linha seguinte.
Vamos escrever o seguinte programa no Arduino IDE e transferi-lo para o Arduino.
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println("Isto é uma mensagem");
}
Em seguida, vamos ver o resultado no monitor série do Arduino IDE.
![](https://i0.wp.com/bitsebytes.pt/wp-content/uploads/2021/09/Arduino_Monitor3.png?resize=721%2C309&ssl=1)
Enviar informação para o Arduino
Vamos agora ver como podemos enviar informação para o Arduino, de modo a que possamos ter comunicação bi-direccional. Podemos verificar que também podemos utilizar o Monitor Série do IDE para enviar informação, já que o mesmo tem uma linha no topo onde é possível escrever e Enviar.
Para o Arduino receber a informação enviada do IDE, vamos necessitar de utilizar duas funções:
- Serial.available()
- Serial.read()
A função Serial.available() devolve o número de caracteres(bytes) que estão disponíveis no buffer de entrada série do Arduino
A função Serial.read() lê o próximo caracter (byte) disponível no buffer
Programa Echo
Vamos agora escrever um programa que ecoa, ou seja, que devolve tudo o que for enviado para o Arduino.
//Devolve cada caracter enviado
char data; //Guarda o caracter recebido
void setup()
{
Serial.begin(9600); //Serial Port a 9600 baud
}
void loop()
{
//Só envia quando receber informação
if (Serial.available() > 0)
{
data = Serial.read(); //Lê um byte recebido
Serial.print(data); //Envia (ecoa) o byte recebido
}
}
Após gravarmos o programa e o carregarmos no Arduino, podemos lançar o Monitor e escrever qualquer texto na linha de envio. Ao carregarmos em Enviar, esse mesmo texto aparecerá na área de texto.
![](https://i0.wp.com/bitsebytes.pt/wp-content/uploads/2021/09/Arduino_Monitor4.png?resize=735%2C314&ssl=1)
Controlo de um LED a partir do teclado
Juntando toda a informação que vimos até agora, vamos escrever um programa que vai permitir ligar/desligar o LED do pino 13, que vem incorporado no Arduino Uno, através do teclado do PC.
Assim, sempre carregarmos na tecla “1”, o LED irá acender. Se carregarmos na tecla “0”, ele irá apagar-se.
//LED controlado pelo teclado
char data; //Guarda o caracter recebido
void setup()
{
Serial.begin(9600); //Porta série a 9600 baud
pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
//Só é excutado se existirem caracteres no buffer de entrada
if (Serial.available() > 0)
{
data = Serial.read(); //Lê um byte
//Liga o LED
if (data == '1')
{
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("LED LIGADO");
}
//Desliga o LED
else if (data == '0')
{
digitalWrite(LED_BUILTIN, LOW);
Serial.println("LED DESLIGADO");
}
}
}
Após compilar e carregar o programa, ele fica à espera que lhe seja enviado o caracter “1” ou “0”. Para tal, vamos abrir o Monitor Série e enviar um desses caracteres. Podemos ver o resultado, quer na janela do Monitor Série, que no LED do Arduino
![](https://i0.wp.com/bitsebytes.pt/wp-content/uploads/2021/09/Monitor_Led.png?resize=733%2C313&ssl=1)