Skriv ut sträng och heltal LCD

Hur skriver jag ut en sträng och ett heltal på en LCD? Här är vad jag har försökt:

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

Och resultatet är ett fel. När jag försöker:

lcd.print(number + "look"); 

eller

lcd.print("1234 " + number); 

Då blir resultatet på LCD-skärmen ”34”, eftersom det raderade de två första siffrorna!

Jag vill att den ska skrivas ut:

1234 2

Snälla hjälp! Tack!

Svar

Metoden lcd.print() tar en sträng eller ett tal som ett argument, men inte båda samtidigt. Att använda + -operatören för sammanfogning är inte infödd i C-strängar. C-strängar lagras i princip som pekare till strängens första tecken. Så när du försökte lcd.print("1234 " + number) och fick "34 ", vad som troligen hände är att du avancerade pekaren och pekade på den första tecknet i "1234 " (dvs. ”1”) av number (dvs. 2), vilket gör att pekaren pekar på 3: e tecken i strängen och därmed lcd.print() visar "34 ". För att skriva ut något som innehåller både strängar och heltal är det enklaste sättet att konvertera varje bit till en Arduino-sträng och sedan sammanfoga dem med hjälp av + -operatorn som du gjorde tidigare.

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

Det här är några exempel. Du kan också skapa en tillräckligt stor char buffert och använda sprintf() från stdio.h för att bygga en sträng som består av heltal och strängar. Leta upp en lärobok på C / C ++ för mer information.

Svar

Jag fick samma problem och jag skrev ut strängen och heltalet på samma rad genom att flytta markören så här:

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

Kommentarer

  • Vad händer om en första felkod är, säg 1234, är en annan 57 … skärmen visar " 5734 " eller?

Svar

Vad är fel med detta:

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

Det är antalet parametrar och antagandet att plus sammanfogar stränglitteraler.

lcd.print("1234 " + number); 

Detta ger ”34” när talet är 2 . Varför? Detta beror på att det är resultatet av att lägga till 2 i strängens bokstavspekare, dvs strängen börjar vid tecknet ”3”. Använd istället separata utskriftsuttalanden:

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

Använd inte String för att sammanfoga strängar. Det är slöseri med SRAM, bearbetning och riskerar högfragmentering. Helt enkelt en dålig idé i småskaliga inbäddade system som AVR.

För att förstå dessa fel bör du gå tillbaka och läsa om strängar och stränglitteraler i C / C ++ (jämfört med Java :).

Skål!

Svar

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

Utgången blir ”a = 0, b = 10,01, c = 2”

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *