Jak vytisknu řetězec a celé číslo na LCD? Tady je to, co jsem zkoušel:
int number = 2; int result = (number + number); lcd.print(number, DEC + " plus " + number, DEC + " equals " + result, DEC);
A výsledkem je chyba. Když to zkusím:
lcd.print(number + "look");
nebo
lcd.print("1234 " + number);
Pak je výsledek na LCD „34“, protože odstranila první dvě čísla!
Chci, aby se to vytisklo:
1234 2
Prosím pomozte! Děkujeme!
Odpovědět
Metoda lcd.print()
převezme řetězec nebo číslo jako argument, ale ne oba najednou. Použití operátoru + pro zřetězení není pro řetězce C nativní. Řetězce C jsou v zásadě uloženy jako ukazatele na první znak řetězce. Takže když jste zkusili lcd.print("1234 " + number)
a dostali "34 "
, s největší pravděpodobností se stalo, že jste posunuli kurzor směrem k prvnímu znaku "1234 "
(tj. „1“) o number
(tj. 2), čímž ukazatel ukazuje na 3. znak v řetězci, čímž se vytvoří lcd.print()
display "34 "
. Chcete-li vytisknout něco, co obsahuje řetězce i celá čísla, nejjednodušším způsobem je převést každý kus na řetězec Arduino a poté je zřetězit pomocí operátoru +, jako jste to udělali dříve.
lcd.print(String("1234 ") + String(number)); lcd.print(String(number) + String(" plus ") + String(number) + String(" equals ") + String(result));
Zde je několik příkladů. Můžete také použít vytvoření dostatečně velké char
vyrovnávací paměti a použít sprintf()
z stdio.h
k sestavení řetězec složený z celých čísel a řetězců. Podívejte se do učebnice o C / C ++, kde najdete další podrobnosti.
Odpověď
Mám stejný problém a vytiskl jsem řetězec a celé číslo na stejném řádku pohybem kurzoru takto:
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);
Komentáře
- Co se stane pokud je první chybový kód řekněme 1234, pak další je 57 … na displeji se zobrazí " 5734 " správně?
Odpověď
Co je na tom špatného:
lcd.print(number, DEC + " plus " + number, DEC + " equals " + result, DEC);
Je to počet parametrů a předpoklad, že plus zřetězí řetězcové literály.
lcd.print("1234 " + number);
To dává „34“, když je číslo 2 Proč? Důvodem je to, že je to výsledek přidání 2 k ukazateli řetězcového literálu, tj. Řetězce začínajícího na znaku „3“. Místo toho použijte samostatné tiskové příkazy:
lcd.print("1234 "); lcd.print(number);
Nepoužívejte řetězec k zřetězení řetězců. To je plýtvání SRAM, zpracováním a existuje riziko fragmentace haldy. Prostě špatný nápad v malých měřítcích vestavěných systémech, jako je AVR.
Abyste těmto chybám porozuměli, měli byste se vrátit zpět a přečíst si o řetězcích a řetězcových literálech v C / C ++ (ve srovnání s Javou :).
Na zdraví!
Odpověď
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);
Výstup bude „a = 0, b = 10.01, c = 2“