Tisk řetězce a celého čísla na LCD

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“

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *