Wie drucke ich eine Zeichenfolge und eine Ganzzahl auf einem LCD? Folgendes habe ich versucht:
int number = 2; int result = (number + number); lcd.print(number, DEC + " plus " + number, DEC + " equals " + result, DEC);
Und das Ergebnis ist ein Fehler. Wenn ich versuche:
lcd.print(number + "look");
oder
lcd.print("1234 " + number);
Dann ist das Ergebnis auf dem LCD „34“, da die ersten beiden Zahlen gelöscht wurden!
Ich möchte, dass es gedruckt wird:
1234 2
Bitte helfen Sie! Danke!
Antwort
Die Methode lcd.print()
verwendet eine Zeichenfolge oder eine Zahl als ein Argument, aber nicht beide gleichzeitig. Die Verwendung des Operators + für die Verkettung ist für C-Zeichenfolgen nicht typisch. C-Strings werden grundsätzlich als Zeiger auf das erste Zeichen des Strings gespeichert. Wenn Sie also lcd.print("1234 " + number)
ausprobiert und "34 "
erhalten haben, ist es am wahrscheinlichsten, dass Sie den Zeiger vorgerückt haben und auf das erste Zeichen von "1234 "
(dh „1“) durch number
(dh 2), wodurch der Zeiger auf 3. Zeichen in der Zeichenfolge und damit lcd.print()
"34 "
anzeigen. Um etwas zu drucken, das sowohl Zeichenfolgen als auch Ganzzahlen enthält, konvertieren Sie am einfachsten jedes Stück in eine Arduino-Zeichenfolge und verketten sie dann mit dem Operator +, wie Sie es zuvor getan haben.
lcd.print(String("1234 ") + String(number)); lcd.print(String(number) + String(" plus ") + String(number) + String(" equals ") + String(result));
Dies sind einige Beispiele. Sie können auch einen ausreichend großen char
-Puffer erstellen und sprintf()
aus stdio.h
zum Erstellen verwenden Eine Zeichenfolge aus Ganzzahlen und Zeichenfolgen. Weitere Informationen finden Sie in einem Lehrbuch zu C / C ++.
Antwort
Ich habe das gleiche Problem und habe die Zeichenfolge und gedruckt die Ganzzahl in derselben Zeile, indem Sie den Cursor wie folgt bewegen:
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);
Kommentare
- Was passiert? Wenn ein erster Fehlercode beispielsweise 1234 ist, dann ist ein anderer 57 … auf dem Display wird " 5734 " angezeigt, oder?
Antwort
Was ist daran falsch:
lcd.print(number, DEC + " plus " + number, DEC + " equals " + result, DEC);
Dies ist die Anzahl der Parameter und die Annahme, dass plus Zeichenfolgenliterale verkettet.
lcd.print("1234 " + number);
Dies ergibt „34“, wenn die Anzahl 2 ist . Warum? Dies liegt daran, dass dies das Ergebnis des Hinzufügens von 2 zum Zeichenfolgenliteralzeiger ist, d. H. Der Zeichenfolge, die mit dem Zeichen „3“ beginnt. Verwenden Sie stattdessen separate Druckanweisungen:
lcd.print("1234 "); lcd.print(number);
Verwenden Sie String nicht zum Verketten von Strings. Dies ist eine Verschwendung von SRAM, Verarbeitung und birgt das Risiko einer Haufenfragmentierung. Einfach eine schlechte Idee in kleinen eingebetteten Systemen wie AVR.
Um diese Fehler zu verstehen, sollten Sie zurückgehen und Informationen zu Zeichenfolgen und Zeichenfolgenliteralen in C / C ++ (im Vergleich zu Java 🙂 lesen.
Prost!
Antwort
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);
Die Ausgabe lautet „a = 0, b = 10,01, c = 2“