A função Serial.print() é usada em quase todos os códigos para imprimir na tela do monitor serial o valor lido pelo sensor, testar laços de repetição ou condicionais, monitorar a posição de atuadores e até mesmo para uma experiência com o usuário em forma de texto. Entretanto, quando temos muitas variáveis para serem mostradas em uma mesma frase, o código fica poluído e confuso. Neste post vamos aprender como concatenar strings e variáveis em apenas uma linha utilizando a função Serial.print().
Função serial.print() sem concatenação
Convencionalmente, usamos uma função Serial.print(var) para cada variável ou string e na última palavra usamos Serial.println(var) para quebrar a linha. Na imagem abaixo mostro a forma tradicional de programação:
Esse código imprime um contador a cada 1 segundo usando a variável “x” que inicia com zero. Na primeira passagem pelo void loop será impresso na tela do computador a seguinte mensagem “Contador: 0 segundos.” . Após passar por essas 3 primeiras linhas com a função Serial.print(), responsável por realizar a impressão no monitor serial de seu computador, o programa executa o quarto comando dentro do void loop que é a função delay(). Essa função é responsável por parar o programa por 1000 milissegundos, ou seja, 1 segundo. Após a contagem desse tempo a variável “x” será incrementada, ou seja somado, 1 unidade com o comando x++ ( a outra forma de escrever esse comando seria: x = x + 1;).
Após essa última linha o programa encontra a “}” e voltará para o início do void loop que passará por tudo de novo, só que agora com a variável “x” valendo 1 e imprimindo na tela a seguinte mensagem: “Contador: 1 segundos.”. Observe a imagem abaixo que mostra como você verá em seu monitor.
Como concatenar strings e variáveis utilizando a função Serial.print()?
Agora, veremos como podemos obter o mesmo resultado na tela do monitor usando apenas uma linha de programação no lugar das 3 linhas que repetem a função Serial.print(). Para isso, utilizaremos a técnica de concatenação.
A concatenação é um termo usado em computação para designar a operação de unir o conteúdo de duas strings (palavras). Por exemplo, considerando as strings “casa” e “mento” a concatenação da primeira com a segunda gera a string “casamento”. Essa é a técnica que utilizaremos com o nosso Arduino e pode ser observada na imagem abaixo:
Observando a imagem acima, o programa não possui alterações até o void loop. No void setup temos o comando que inicializa a comunicação serial entre o Arduino e o seu computador a uma taxa de transmissão de 9600 baunds (Serial.begin(9600);).
O segredo do nosso post se aplica agora nesse void loop: ao invés de escrevermos 3 vezes a função Serial.print(), iremos escrevê-la apenas uma vez como Serial.println(), já incluindo o “ln” para garantir a quebra de linha.
- Entre as palavras que queremos concatenar, precisaremos usar o “+” para adicionar uma palavra com a outra.
- Quando temos uma palavra dentro dos parênteses da função Serial.print(“MakerHero”) se insere as aspas duplas.
- Se a impressão for referente a uma variável, se escreve de forma normal: Serial.print(x).
Porém, devemos considerar que a variável é um número inteiro e o processo de concatenação é de strings, ou seja palavras. Sendo assim, antes é preciso transformá-la em uma string. Essa transformação é feita adicionando o termo String junto da minha variável (x).
Logo com todas as explicações dadas, basta escrever o comando correto Serial.println(“Contando: ” + String(x) + ” segundos.”); e sua mensagem será impressa da forma desejada, “Contador: 0 segundos.”.
Conclusão
Existem diversas formas de escrever um código e chegar ao resultado final correto, porém, algumas boas práticas de programação facilitam a leitura e entendimento de outros usuários que venha a compartilhar o projeto com você. Podem também melhorar o processamento de seu Arduino, economizando memória ou evitando travamento de sensores. O mundo Arduino é muito rico, e estamos aqui para ajudar você a desvendá-lo.
Gostou de aprender como concatenar strings e variáveis utilizando a função Serial.print()? Então deixe seu comentário aqui embaixo! Além disso, não deixe de visitar outros conteúdos do blog da MakerHero e o meu canal no Youtube: Sandro Mesquita – Roboticamente. Bons estudos!
Gostaria de saber como fazer para escrever da seguinte forma:
int x;
string g;
sprintf(g, “Temperatura: %d ºC”, x);
Serial.println(g);
sei que funciona para variavel int, mas e para float? (%f creio eu), int8?, int16?, byte?, long int?,….
há alguma tabela que informe isso?
Alexis,
Dê uma olhada aqui: https://en.wikibooks.org/wiki/C%2B%2B_Programming/Code/Standard_C_Library/Functions/scanf
Abraços!
Diogo – Equipe MakerHero
Parabéns professor Sandro Mesquita, continue assim com esse empenho.
#sandromesquita
Esse meu professor é muito ferra, parabéns Sandro.