HOWTO · Arduino
Variáveis Múltiplas de Impressão em Série Arduino
É possível exibir valores de variáveis no monitor serial usando as funções Serial.print() e Serial.println().
Nesta página
Para exibir vários valores de variáveis no Monitor Serial do Arduino, inicialize a comunicação serial com Serial.begin() e envie cada valor com Serial.print() ou Serial.println(). Chamadas consecutivas de Serial.print() continuam escrevendo na linha atual; Serial.println() termina o valor com uma quebra de linha. Adicione texto entre os valores para facilitar a leitura do resultado. Configure o Monitor Serial com a mesma taxa de transmissão usada em Serial.begin().
O exemplo completo abaixo mostra valores separados em uma linha, precisão de ponto flutuante, valores em linhas separadas e um par que muda. Um pequeno adaptador para computador permite executar o mesmo código-fonte como C++ padrão: em uma placa Arduino, o núcleo da placa fornece Serial e delay(); no computador, o adaptador escreve na saída padrão e executa duas iterações de demonstração. Ao usar uma placa, configure o Monitor Serial com a mesma taxa de transmissão de Serial.begin().
Imprimir vários valores na mesma linha com Serial.print()
Serial.print() converte um valor em texto e o escreve sem adicionar uma quebra de linha. Chame a função sucessivamente para cada campo e imprima um separador entre eles. O exemplo usa uma tabulação ("\t") entre as leituras de temperatura e umidade; assim, a saída contém um caractere de tabulação, e não os dois caracteres visíveis barra invertida e t.
Para valores de ponto flutuante, o segundo argumento opcional especifica quantos dígitos devem aparecer depois do separador decimal. Neste exemplo, Serial.print(temperature, 2) solicita dois dígitos fracionários. Isso altera a formatação exibida, mas não o valor armazenado na variável. Uma chamada final de Serial.println() encerra a linha. O argumento opcional de precisão se aplica à formatação de ponto flutuante; valores inteiros são impressos como números inteiros.
Imprimir valores em linhas separadas com Serial.println()
Use Serial.println(value) quando cada valor deve começar em sua própria linha. A função escreve o valor e, em seguida, uma quebra de linha; por isso, chamadas consecutivas formam uma lista vertical. No código, o rótulo e seu valor permanecem juntos porque cada rótulo é impresso com Serial.print() e o valor correspondente, com Serial.println().
Abra o Monitor Serial em 9600 baud para corresponder a Serial.begin(9600). Se o monitor estiver configurado com outra taxa, os caracteres recebidos podem parecer ilegíveis, mesmo que o código esteja enviando os valores esperados. Cada chamada de Serial.println() escreve o valor seguido de uma quebra de linha, então a chamada seguinte começa em uma nova linha.
Combinar as duas funções para formatar valores que mudam
Para leituras repetidas, use Serial.print() para o primeiro valor e um separador; depois, use Serial.println() para o último valor da linha. O laço abaixo imprime um par de valores que muda, com uma tabulação entre eles e uma quebra de linha após cada par. O valor da umidade é incrementado antes da iteração seguinte; o segundo valor é sempre cinco unidades maior. Em uma placa, o laço se repete e faz uma breve pausa entre as linhas. O adaptador para computador executa duas iterações para tornar visível a mudança na saída. As seções anteriores sobre valores na mesma linha e em linhas separadas se referem a este único exemplo completo, que mantém as declarações das variáveis e a configuração serial em um só lugar.
Ao adaptar o código, mantenha a ordem dos campos e o delimitador consistentes se outro programa for analisar as linhas; alterar qualquer um deles pode afetar esse programa. O adaptador para computador demonstra apenas a formatação: ele não simula uma placa nem o Monitor Serial.
Execute este exemplo. O adaptador para computador escreve na saída padrão; em uma placa, o núcleo do Arduino fornece as mesmas chamadas de Serial e o loop() que se repete. O código e os rótulos e saídas exibidos nele permanecem em inglês.
#ifndef ARDUINO
#include <iostream>
class HostSerial {
public:
void begin(unsigned long) {}
void print(const char* value) { std::cout << value; }
void print(int value) { std::cout << value; }
void print(double value, int digits = 2) {
std::cout.setf(std::ios::fixed);
std::cout.precision(digits);
std::cout << value;
std::cout.unsetf(std::ios::fixed);
}
void println(const char* value) { print(value); std::cout << '\n'; }
void println(int value) { print(value); std::cout << '\n'; }
void println(double value, int digits = 2) { print(value, digits); std::cout << '\n'; }
};
HostSerial Serial;
void delay(unsigned long) {}
#endif
int humidity = 40;
void setup() {
Serial.begin(9600);
}
void loop() {
float temperature = 23.456;
Serial.print("Temperature: ");
Serial.print(temperature, 2);
Serial.print("\t");
Serial.print("Humidity: ");
Serial.println(humidity);
Serial.print("Temperature on its own line: ");
Serial.println(temperature, 2);
Serial.print("Humidity on its own line: ");
Serial.println(humidity);
int first = humidity;
int second = humidity + 5;
Serial.print(first);
Serial.print("\t");
Serial.println(second);
humidity++;
delay(1000);
}
#ifndef ARDUINO
int main() {
setup();
loop();
loop();
}
#endif
Temperature: 23.46 Humidity: 40
Temperature on its own line: 23.46
Humidity on its own line: 40
40 45
Temperature: 23.46 Humidity: 41
Temperature on its own line: 23.46
Humidity on its own line: 41
41 46