Comunicação Serial
Comunicação Serial¶
A comunicação serial é fundamental para a troca de dados entre o microcontrolador (o arduino no nosso caso) e outros dispositivos, como um computador, outro arduino, um celular.
No arduino usamos a classe Serial
que oferece várias opções e métodos para gerenciar essa comunicação.
Tip
Documentação oficial: https://www.arduino.cc/reference/pt/language/functions/communication/serial/
Aqui estão as principais:
Iniciando a comunicação serial:¶
Serial.begin(baudRate);
- Inicia a comunicação serial com a taxa de transmissão especificada.
void setup() {
Serial.begin(9600);
}
Tip
A taxa de transmissão padrão é de 9600
bps (bits por segundo), mas outros valores podem ser utilizados conforme a necessidade do projeto. Confira a tabela de taxas de transmissão mais comuns para saber mais.
Enviando dados pela serial:¶
Serial.print(data);
- Envia dados para a porta serial,sem pular para uma nova linha
.Serial.println(data);
- Envia dados para a porta serial,seguido por um caractere de nova linha (\n)
.
void loop() {
Serial.print("Hello, World!");
Serial.println("Hello, World!");
}
Recebendo dados pela serial:¶
A leitura de dados da porta serial no Arduino acontece quando você precisa receber informações de outros dispositivos, como sensores, computadores ou outros microcontroladores.
Antes de tentar ler os dados, é importante verificar se há bytes disponíveis na porta serial. Isso pode ser feito utilizando a função Serial.available()
, que retorna o número de bytes prontos para serem lidos:
void loop() {
if (Serial.available() > 0) {
// Há dados disponíveis para leitura
}
}
Tip
Certifique-se de sempre verificar a disponibilidade de dados antes de tentar lê-los, evitando assim erros ou falhas no processamento de informações inexistentes.
Depois de confirmar que há dados disponíveis, você pode utilizar diversas funções da classe Serial para ler esses dados. As funções mais comuns são:
Serial.read();
- Lê um único byte da serial. O byte é retornado como um número inteiro entre 0 e 255. Se não houver dados disponíveis, a função retorna -1. Ideal para leituras byte a byte.Serial.readString();
- Lê a entrada serial como umaString
até que um caractere de nova linha () seja encontrado ou até que o tempo limite seja atingido. Útil para receber comandos ou mensagens de texto completas.
Serial.readStringUntil(character);
- Lê a entrada serial como umaString
até que o caractere especificado seja encontrado.Serial.parseInt();
- Lê o próximo valor inteiro da porta serial, ignorando caracteres não numéricos até encontrar um número. A leitura continua até encontrar um caractere que não faça parte do número.Serial.parseFloat();
- Lê o próximo valor em ponto flutuante até encontrar um caractere que não seja parte do número, incluindo o ponto decimal.
void loop() {
// Lendo um único byte
Serial.println("Digite unico byte");
while (Serial.available() == 0) {} // Aguarda digitar
int valor = Serial.read();
Serial.print("Byte lido: ");
Serial.println(valor);
Serial.println();
// Lendo uma string completa
Serial.println("Digite uma string completa");
while (Serial.available() == 0) {} // Aguarda digitar
String valorString = Serial.readString();
Serial.print("String recebida: ");
Serial.println(valorString);
Serial.println();
// Lendo uma string até encontrar um caractere específico
Serial.println("Digite uma string com ; no final");
while (Serial.available() == 0) {} // Aguarda digitar
String partialString = Serial.readStringUntil(';');
Serial.print("String parcial até ';': ");
Serial.println(partialString);
Serial.println();
// Lendo um valor inteiro
Serial.println("Digite um valor do tipo inteiro");
while (Serial.available() == 0) {} // Aguarda digitar
int intValue = Serial.parseInt();
Serial.print("Inteiro lido: ");
Serial.println(intValue);
Serial.println();
// Lendo um valor de ponto flutuante
Serial.println("Digite um valor do tipo float");
while (Serial.available() == 0) {} // Aguarda digitar
float floatValue = Serial.parseFloat();
Serial.print("Float lido: ");
Serial.println(floatValue);
Serial.println();
}
Outros métodos úteis:¶
Serial.setTimeout(time);
- Otime
determina quanto tempo a função aguardará antes de desistir da leitura, caso os dados não estejam disponíveis.