Bóson Treinamentos em Ciência e Tecnologia

Enviando e recebendo dados com Serial Monitor no Arduino

Serial Monitor no Arduino

Como enviar e receber dados com Serial Monitor

Podemos enviar informações do Arduino para o PC (ou outros dispositivos) usando o IDE (ou outro programa de terminal serial qualquer), de modo a verificarmos se nosso programa está operando da forma esperada, e assim podermos detectar e eliminar erros de programação, ou efetuarmos qualquer outro tipo de comunicação com a máquina.

E também podemos enviar dados e comandos do PC para o Arduino, de modo a poder controlar dispositivos eletrônicos a ele conectados.

As placas de Arduino possuem ao menos uma porta serial (UART / USART), chamada de Serial. Ela realiza comunicação por meio dos pinos digitais 0 (RX) e 1 (TX), assim como via USB com o PC. Veja um detalhe da placa de um Arduino UNO mostrando esses pinos e sua identificação:

Se usarmos esses pinos com a função de TX/RX, não poderemos utilizá-los para outras funções.

Podemos usar a ferramenta de  Monitor Serial presente no IDE para comunicação com a placa. Para isso, basta clicar no botão Serial Monitor na barra de ferramentas, e selecionar a taxa de transferência desejada em bauds (a mesma que será inserida no código):

Vamos trabalhar em nosso projeto com o Arduino UNO, que possui as características descritas acima. Outras placas podem possuir características diferentes, como o Arduino Mega, que possui três portas seriais adicionais, e o Arduino Due, que possui três portas seriais TTL de 3.3V a mais. Nosso projeto funcionará em qualquer uma das placas.

Vamos ver alguns exemplos de comunicação serial com o Arduino, usando a classe Serial.

A classe Serial

A classe Serial possui diversas funções para comunicação, sendo algumas delas listadas na tabela a seguir:

Função Significado
available() Obtém o número de bytes disponíveis para leitura na porta serial.
begin() Configura a taxa de dados em bauds para transmissão serial de dados
end() Desabilita a comunicação serial, permitindo que os pinos TX e RX (0 e 1) sejam usados para entrada e saída geral de sinais.
print() Imprime dados na porta serial em formato legível por humanos (texto ASCII)
println() Idem a print(), porém adicionando um caractere de retorno de carro (ASCII 13) e um de nova linha (ASCII 10) no final da string.
read() Lê dados a partir da porta serial.
readBytes() Lê caracteres a partir da porta serial em um buffer até que uma determinada quantidade de caracteres tenha sido lida.
write() Escreve dados binários na porta serial

Vamos a um exemplo: exibir números sequenciais no monitor serial:

Exemplo 01: Exibir números sequenciais no Monitor Serial:

Conecte o Arduino na porta USB de seu PC, abra o IDE e digite o seguinte código em um novo projeto:

/* Testando a saída serial do Arduíno
Vamos escrever números na porta serial*/
void setup(){
  Serial.begin(9600); //Enviar e receber dados em 9600 baud
  Serial.println("Gerando valores sequenciais");
}
int numero = 0;
void loop() {
  Serial.print("Valor: ");
  Serial.println(numero);
  delay(500);
  numero++;
}

Após digitar o código no IDE, compile-o e envie-o para execução no Arduino. Então, abra o Serial Monitor para verificar os dados sendo transmitidos do Arduino para seu PC:

Exemplo 02: Exibindo valores da 1 a 255 em vários sistemas

Neste segundo exemplo, vamos exibir os números de 1 a 255 no monitor serial nos sistemas decimal, binário e hexadecimal.

Conecte seu Arduino à porta USB, abra o IDE no PC e digite o código a seguir:

/* Exibindo valores em diferentes sistemas de numeração */
int valor = 0;

void setup() {
  Serial.begin(9600);  Serial.println("Exibindo valores em sistemas diversos");
}
void loop() { 
  for (valor = 0; valor <= 255; valor++)  {
    Serial.print("DEC: ");
    Serial.print(valor);
    Serial.print(" HEX: ");
    Serial.print(valor, HEX);
    Serial.print(" BIN: ");
    Serial.println(valor, BIN);

/* Se o valor for 255, não repetir mais a geração de números.
Entrar nesse loop para sempre:
*/
    if(valor == 255) {
      while(true) {
        continue;
      }
    }
  }
}

Após digitar o código, compile-o e envie para execução no Arduino. Veja a saída esperada:

 

Enviando dados do PC para o Arduino via porta serial

Queremos agora efetuar o processo inverso: enviar caracteres do PC para o Arduino, o que pode ser muito útil para, por exemplo, controlar dispositivos a partir do computador conectado a um Arduino.

Vamos criar um projeto para demonstrar o uso da função Serial.read():

Ex. 03: Controlando um LED a partir do PC

Neste projeto vamos fazer um LED piscar em uma velocidade proporcional a um valor numérico enviado a partir do PC. Crie um novo projeto no IDE e digite o código abaixo:

/* Enviando dados do PC para o Arduíno.
Vamos piscar um LED de forma proporcional ao valor recebido a partir do PC */
 
const int ledPin = 13; // Pino ao qual o LED será conectado
int piscando = 0; // variável para armazenar taxa de “piscagem”
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT); // Pino 13 será de saída de sinais
}
 
void loop()
{
if (Serial.available()) { // Verificar se há caracteres disponíveis
char caractere = Serial.read(); // Armazena caractere lido
if ( isDigit(caractere) ) {  // Verificar se o caractere ASCII é um dígito entre 0 e 9
  piscando = (caractere – ‘0’); // Convertendo ASCII em valor numérico (0 = 48)
  piscando = piscando * 100; // Escalando taxa de tempo multiplicando por 100ms
}
}
pisca(); // Chamando a função blink(), que será declarada abaixo.
}
 
/* Declarando a função pisca() que fará o LED piscar na taxa determinada pelo valor armazenado na variável piscando
*/
 
void pisca()
{
 digitalWrite(ledPin, HIGH);
 delay(piscando);
 digitalWrite(ledPin, LOW);
 delay(piscando);
}

Conecte um LED ao Arduino usando uma protoboard e um resistor de aproximadamente 470 ohms conforme a ilustração abaixo mostra:

 

Compile e envie o código digitado ao Arduino. Logo após, abra o Serial Monitor, digite um número entre 0 e 9 e clique no botão Send para enviar o valor ao Arduino:

Observe que o LED piscará numa velocidade diferente para cada número enviado a partir do IDE. Desta forma, atingimos nosso objetivo de enviar dados a partir do PC para a placa do Arduino, controlando um dispositivo eletrônico conectado a ele.

Usando outro programa para comunicação serial com o Arduino

Podemos também acessar a porta serial usando outro programa, como o PuTTY. Para isso, abra o PuTTY (que pode ser baixado gratuitamente em http://www.putty.org/) e faça os ajustes conforme as figuras a seguir:

Em Session, clique em Serial no tipo da conexão, digite o nome da porta serial na caixa Serial line (a minha é COM 3), e a velocidade em bauds em Speed (9600 no meu caso):

Em Terminal, clique em Force On nas seções Local echo e Local line editing:

Clique no botão Open para abrir a conexão e observe as mensagens sendo enviadas do Arduino para o PuTTY ao enviarmos o programa do exemplo 02:

Há muitos outros softwares para comunicação serial disponíveis para uso com o Arduino, como o GNU Screen (http://www.gnu.org/software/screen), RealTerm (http://realterm.sourceforge.net/) e CoolTerm (http://freeware.the-meiers.org/), entre outros.

No próximo artigo vamos começar a explorar o Arduino criando um projeto bem interessante com LEDs.

 

Sair da versão mobile