Imprimir string e LCD de inteiro

Como faço para imprimir uma string e um inteiro em um LCD? Aqui está o que tentei:

int number = 2; int result = (number + number); lcd.print(number, DEC + " plus " + number, DEC + " equals " + result, DEC); 

E o resultado é um erro. Quando tento:

lcd.print(number + "look"); 

ou

lcd.print("1234 " + number); 

Então o resultado no LCD é “34”, pois apagou os dois primeiros números!

Quero imprimir:

1234 2

Por favor, ajude! Obrigado!

Resposta

O método lcd.print() usa uma string ou um número como um argumento, mas não ambos ao mesmo tempo. Usar o operador + para concatenação não é nativo para strings C. As strings C são basicamente armazenadas como ponteiros para o primeiro caractere da string. Então, quando você tentou lcd.print("1234 " + number) e obteve "34 ", o que provavelmente aconteceu é que você avançou o ponteiro, apontando para o primeiro caractere de "1234 " (ou seja, “1”) por number (ou seja, 2), fazendo com que o ponteiro aponte para caractere na string, fazendo com que lcd.print() exiba "34 ". Para imprimir algo que contenha strings e inteiros, a maneira mais direta é converter cada parte em uma string Arduino e, em seguida, concatená-los, usando o operador + como você fez anteriormente.

 lcd.print(String("1234 ") + String(number)); lcd.print(String(number) + String(" plus ") + String(number) + String(" equals ") + String(result)); 

Estes são alguns exemplos. Você também pode criar um buffer char suficientemente grande e usar sprintf() de stdio.h para construir uma string composta de inteiros e strings. Procure um livro sobre C / C ++ para obter mais detalhes.

Resposta

Eu tive o mesmo problema e imprimi a string e o inteiro na mesma linha movendo o cursor desta forma:

 lcd.setCursor(0, 0); <----------Column 0 , Line 1 lcd.print("This code failed"); lcd.setCursor(0, 1); <----------Column 0 , Line 2 lcd.print("Error Code = "); lcd.setCursor(13, 1); <-change the cursor for the INT. Column 13 , Line 2 lcd.print(int); 

Comentários

  • O que acontece se um primeiro código de erro for, digamos, 1234, então outro é 57 … o visor mostraria " 5734 " certo?

Resposta

O que há de errado com isso:

lcd.print(number, DEC + " plus " + number, DEC + " equals " + result, DEC); 

É o número de parâmetros e a suposição de que o plus concatenará literais de string.

lcd.print("1234 " + number); 

Isso dá “34” quando o número é 2 . Por que? Isso ocorre porque esse é o resultado da adição de 2 ao ponteiro de literal de string, ou seja, a string começando no caractere “3”. Em vez disso, use instruções de impressão separadas:

lcd.print("1234 "); lcd.print(number); 

Não use String para concatenar strings. Isso é um desperdício de SRAM, processamento e tem o risco de fragmentação do heap. Simplesmente uma má ideia em sistemas embarcados de pequena escala como o AVR.

Para entender esses erros, você deve voltar e ler sobre strings e literais de string em C / C ++ (em comparação com Java :).

Saudações!

Resposta

int a=0; float b=10.01; char str[16]; sprintf(str,"a=%d, b=%.2f, c=%d", a, b, 2); // use sprintf() to compose the string str lcd.print(str); 

A saída será “a = 0, b = 10,01, c = 2”

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *