Cum imprim un șir și întreg pe un LCD? Iată ce am încercat:
int number = 2; int result = (number + number); lcd.print(number, DEC + " plus " + number, DEC + " equals " + result, DEC);
Iar rezultatul este o eroare. Când încerc:
lcd.print(number + "look");
sau
lcd.print("1234 " + number);
Atunci rezultatul de pe ecranul LCD este „34”, deoarece a șters primele două numere!
Vreau să se tipărească:
1234 2
Vă rugăm să ajutați! Mulțumesc!
Răspuns
Metoda lcd.print()
ia un șir sau un număr ca un argument, dar nu amândouă odată. Utilizarea operatorului + pentru concatenare nu este nativă pentru șirurile C. Șirurile C sunt stocate practic ca indicatori către primul caracter al șirului. Deci, când ați încercat lcd.print("1234 " + number)
și ați primit "34 "
, ceea ce s-a întâmplat cel mai probabil este că ați avansat indicatorul, indicând primul caracter al "1234 "
(adică „1”) de number
(adică 2), făcând astfel indicatorul să indice al treilea caracter din șir și astfel afișarea lcd.print()
afișează "34 "
. Pentru a imprima ceva care conține atât șiruri, cât și numere întregi, cel mai simplu mod este de a converti fiecare piesă într-un șir Arduino și apoi să le concatenăm, folosind operatorul + așa cum ați făcut mai devreme.
lcd.print(String("1234 ") + String(number)); lcd.print(String(number) + String(" plus ") + String(number) + String(" equals ") + String(result));
Acestea sunt câteva exemple. De asemenea, puteți utiliza creați un tampon char
suficient de mare și puteți utiliza sprintf()
din stdio.h
un șir format din numere întregi și șiruri. Căutați un manual despre C / C ++ pentru mai multe detalii.
Răspuns
Am aceeași problemă și am imprimat șirul și întregul de pe aceeași linie prin deplasarea cursorului astfel:
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);
Comentarii
- Ce se întâmplă dacă un prim cod de eroare este, să zicem, 1234, atunci altul este 57 … afișajul ar afișa " 5734 " nu?
Răspuns
Ce este în neregulă cu acest lucru:
lcd.print(number, DEC + " plus " + number, DEC + " equals " + result, DEC);
Este numărul de parametri și presupunerea că plus va concatena literele șirului.
lcd.print("1234 " + number);
Acest lucru dă „34” când numărul este 2 . De ce? Acest lucru se datorează faptului că acesta este rezultatul adăugării 2 la indicatorul literal al șirului, adică șirul care începe de la caracterul „3”. Vă rugăm să folosiți în schimb instrucțiuni de imprimare separate:
lcd.print("1234 "); lcd.print(number);
Nu utilizați Șir pentru a concatena șiruri. Aceasta este o risipă de SRAM, procesată și are un risc de fragmentare a grămezii. Pur și simplu o idee proastă în sistemele încorporate la scară mică, cum ar fi AVR.
Pentru a înțelege aceste erori, ar trebui să vă întoarceți și să citiți despre șirurile și literele șirurilor în C / C ++ (în comparație cu Java :).
Noroc!
Răspuns
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);
Ieșirea va fi „a = 0, b = 10.01, c = 2”