Print string en integer LCD

Hoe druk ik een string en integer af op een LCD? Dit is wat ik heb geprobeerd:

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

En het resultaat is een fout. Als ik het probeer:

lcd.print(number + "look"); 

of

lcd.print("1234 " + number); 

Dan is het resultaat op het LCD-scherm “34”, omdat het de eerste twee cijfers heeft verwijderd!

Ik wil dat het wordt afgedrukt:

1234 2

Help alstublieft! Bedankt!

Antwoord

De lcd.print() -methode heeft een string of een getal als een argument, maar niet beide tegelijk. Het gebruik van de operator + voor aaneenschakeling is niet eigen aan C-strings. C-strings worden in principe opgeslagen als verwijzingen naar het eerste teken van de string. Dus toen je lcd.print("1234 " + number) probeerde en "34 " kreeg, was het waarschijnlijk dat je de aanwijzer naar het eerste teken van "1234 " (ie “1”) door number (ie 2), waardoor de aanwijzer naar de 3e teken in de string, waardoor lcd.print() display "34 ". Om iets af te drukken dat zowel strings als gehele getallen bevat, is de meest eenvoudige manier om elk stuk naar een Arduino-string te converteren en ze vervolgens samen te voegen, met behulp van de + operator zoals je eerder deed.

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

Dit zijn enkele voorbeelden. U kunt ook een voldoende grote char buffer gebruiken en sprintf() van stdio.h gebruiken om een string die bestaat uit gehele getallen en strings. Zoek een leerboek over C / C ++ op voor meer details.

Antwoord

Ik heb hetzelfde probleem en ik heb de string afgedrukt en het gehele getal op dezelfde regel door de cursor als volgt te verplaatsen:

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

Opmerkingen

  • Wat gebeurt er als een eerste foutcode bijvoorbeeld 1234 is, dan is een andere 57 … het display zou " 5734 " tonen toch?

Antwoord

Wat is hier mis mee:

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

Het is het aantal parameters en de aanname dat plus letterlijke tekenreeksen samenvoegt.

lcd.print("1234 " + number); 

Dit geeft “34” als het getal 2 is . Waarom? Dit komt omdat dat het resultaat is van het toevoegen van 2 aan de letterlijke tekenreeksaanwijzer, d.w.z. de tekenreeks die begint bij het teken “3”. Gebruik in plaats daarvan aparte afdrukinstructies:

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

Gebruik geen String om strings samen te voegen. Dat is een verspilling van SRAM, verwerking en heeft een risico op hoopfragmentatie. Gewoon een slecht idee in kleinschalige embedded systemen zoals AVR.

Om deze fouten te begrijpen, moet je teruggaan en lezen over strings en letterlijke tekenreeksen in C / C ++ (vergeleken met Java :).

Proost!

Answer

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

De uitvoer is “a = 0, b = 10.01, c = 2”

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *