Karakterlánc és egész LCD nyomtatása

Hogyan nyomtathatok egy karakterláncot és egészet egy LCD-re? Itt van, amit kipróbáltam:

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

És az eredmény hiba. Amikor megpróbálom:

lcd.print(number + "look"); 

vagy

lcd.print("1234 " + number); 

Ezután az eredmény az LCD-n “34”, mivel törölte az első két számot!

Szeretném kinyomtatni:

1234 2

Kérem, segítsen! Köszönöm!

Válasz

A lcd.print() metódus karakterláncot vagy számot vesz fel érv, de nem egyszerre mindkettő. A + operátor használata az összefűzéshez nem a C karakterláncokban honos. A C karakterláncokat alapvetően a karakterlánc első karakterére mutató mutatókként tárolják. Tehát amikor megpróbálta a (z) lcd.print("1234 " + number) alkalmazást, és megkapta a "34 " elemet, akkor valószínűleg az történt, hogy továbbléptette a mutatót, rámutatva a "1234 " (azaz “1”) number (azaz 2) által, ezzel a mutató a 3. karakter a karaktersorozatban, és így a lcd.print() megjelenítésre kerül a "34 ". A karakterláncokat és egész számokat egyaránt tartalmazó elemek kinyomtatásához a legegyszerűbb az, ha minden darabot Arduino karakterlánccá alakítunk át, majd összefűzjük őket a + operátor használatával, mint korábban.

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

Íme néhány példa. Használhat elegendően nagy char puffert, és használhatja a sprintf() elemet a stdio.h felépítéséhez egész számokból és húrokból álló karakterlánc. További részletekért keressen egy tankönyvet a C / C ++ rendszerről.

Válasz

Ugyanaz a probléma merült fel, és kinyomtattam a karakterláncot, és az ugyanazon a soron lévő egész szám a kurzor így mozgatásával:

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

Megjegyzések

  • Mi történik ha az első hibakód mondjuk 1234, akkor egy másik 57 … a kijelzőn " 5734 " jelenik meg?

Válasz

Mi a baj ezzel:

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

Ez a paraméterek száma és az a feltételezés, hogy a plusz összefűzi a karakterláncokat.

lcd.print("1234 " + number); 

Ez “34” értéket ad, ha a szám 2 . Miért? Ennek az az eredménye, hogy 2-et hozzáadunk a karakterlánc-szó szerinti mutatóhoz, vagyis a “3” -tól kezdődő karakterláncot. Kérjük, használjon külön nyomtatott utasításokat:

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

Ne használja a String karakterláncok összefűzését. Ez az SRAM, a feldolgozás pazarlása és a halom töredezettségének veszélyét hordozza magában. Egyszerűen rossz ötlet olyan kis méretű beágyazott rendszerekben, mint az AVR.

A hibák megértéséhez érdemes visszalépnie a C / C ++ nyelvű karakterláncokról és karakterláncokról (a Java-hoz képest :).

Egészségére!

Válasz

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 kimenet “a = 0, b = 10.01, c = 2”

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük