Stampa stringa e numero intero LCD

Come faccio a stampare una stringa e un numero intero su un LCD? Ecco cosa ho provato:

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

E il risultato è un errore. Quando provo:

lcd.print(number + "look"); 

o

lcd.print("1234 " + number); 

Il risultato sul display LCD è “34”, poiché ha cancellato i primi due numeri!

Voglio che venga stampato:

1234 2

Per favore aiuto! Grazie!

Risposta

Il metodo lcd.print() accetta una stringa o un numero come un argomento, ma non entrambi contemporaneamente. Lutilizzo delloperatore + per la concatenazione non è nativo per le stringhe C. Le stringhe C sono fondamentalmente memorizzate come puntatori al primo carattere della stringa. Quindi, quando hai provato lcd.print("1234 " + number) e hai ottenuto "34 ", ciò che molto probabilmente è successo è che hai fatto avanzare il puntatore, puntando al primo carattere di "1234 " (ovvero “1”) di number (es. 2), facendo in modo che il puntatore punti a 3 ° carattere nella stringa e quindi lcd.print() display "34 ". Per stampare qualcosa che contenga sia stringhe che numeri interi, il modo più semplice è convertire ogni pezzo in una stringa Arduino e poi concatenarli, usando loperatore + come hai fatto in precedenza.

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

Questi sono alcuni esempi. Puoi anche creare un char buffer sufficientemente grande e utilizzare sprintf() da stdio.h per creare una stringa composta da numeri interi e stringhe. Cerca un libro di testo in C / C ++ per maggiori dettagli.

Risposta

Ho avuto lo stesso problema e ho stampato la stringa e il numero intero sulla stessa riga spostando il cursore in questo modo:

 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); 

Commenti

  • Cosa succede se un primo codice di errore è, ad esempio, 1234, un altro è 57 … il display mostrerà " 5734 " giusto?

Risposta

Cosa cè di sbagliato in questo:

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

È il numero di parametri e lipotesi che più concatenerà stringhe letterali.

lcd.print("1234 " + number); 

Questo dà “34” quando numero è 2 . Perché? Questo perché questo è il risultato dellaggiunta di 2 al puntatore letterale della stringa, ovvero la stringa che inizia dal carattere “3”. Utilizza invece istruzioni print separate:

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

Non utilizzare String per concatenare le stringhe. Questo è uno spreco di SRAM, elaborazione e ha il rischio di frammentazione dellheap. Semplicemente una cattiva idea in sistemi embedded su piccola scala come AVR.

Per capire questi errori dovresti tornare indietro e leggere le stringhe e le stringhe letterali in C / C ++ (rispetto a Java :).

Saluti!

Risposta

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); 

Loutput sarà “a = 0, b = 10.01, c = 2”

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *