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”