Drukowanie ciągów i liczb całkowitych na wyświetlaczu LCD

Jak wydrukować ciąg i liczbę całkowitą na wyświetlaczu LCD? Oto, czego próbowałem:

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

Rezultatem jest błąd. Kiedy próbuję:

lcd.print(number + "look"); 

lub

lcd.print("1234 " + number); 

Wynik na wyświetlaczu LCD jest „34”, ponieważ usunęło pierwsze dwie cyfry!

Chcę wydrukować:

1234 2

Proszę o pomoc! Dzięki!

Odpowiedź

Metoda lcd.print() przyjmuje ciąg lub liczbę jako argument, ale nie oba naraz. Używanie operatora + do konkatenacji nie jest natywne dla ciągów C. Łańcuchy C są zasadniczo przechowywane jako wskaźniki do pierwszego znaku łańcucha. Kiedy więc wypróbowałeś lcd.print("1234 " + number) i otrzymałeś "34 ", najprawdopodobniej przesunąłeś wskaźnik w górę, wskazując na pierwszy znak "1234 " (tj. „1”) przez number (tj. 2), dzięki czemu wskaźnik będzie wskazywał na Trzeci znak w ciągu, dzięki czemu lcd.print() wyświetla "34 ". Aby wydrukować coś, co zawiera zarówno ciągi, jak i liczby całkowite, najprostszym sposobem jest przekonwertowanie każdego fragmentu na ciąg Arduino, a następnie połączenie ich za pomocą operatora +, tak jak wcześniej.

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

Oto kilka przykładów. Możesz też utworzyć wystarczająco duży char bufor i użyć sprintf() z stdio.h do zbudowania ciąg złożony z liczb całkowitych i łańcuchów. Zajrzyj do podręcznika na temat C / C ++, aby uzyskać więcej informacji.

Odpowiedź

Mam ten sam problem i wydrukowałem ciąg i liczbę całkowitą w tym samym wierszu, przesuwając kursor w następujący sposób:

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

Komentarze

  • Co się dzieje jeśli pierwszy kod błędu to, powiedzmy, 1234, a drugi to 57… na wyświetlaczu pojawi się " 5734 " prawda?

Odpowiedź

Co w tym złego:

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

Jest to liczba parametrów i założenie, że plus połączy literały łańcuchowe.

lcd.print("1234 " + number); 

Daje to „34”, gdy liczba wynosi 2 . Dlaczego? Dzieje się tak, ponieważ jest to wynikiem dodania 2 do wskaźnika literału ciągu, tj. Ciągu zaczynającego się od znaku „3”. Zamiast tego użyj oddzielnych instrukcji print:

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

Nie używaj String do łączenia łańcuchów. To marnotrawstwo SRAM, przetwarzanie i ryzyko fragmentacji hałdy. Po prostu zły pomysł w małych systemach wbudowanych, takich jak AVR.

Aby zrozumieć te błędy, należy cofnąć się i poczytać o napisach i literałach ciągów w C / C ++ (w porównaniu z Javą :).

Pozdrawiam!

Odpowiedź

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

Wynik to „a = 0, b = 10.01, c = 2”

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *