Printstreng og heltal LCD

Hvordan udskriver jeg en streng og et heltal på en LCD? Her er hvad jeg har prøvet:

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

Og resultatet er en fejl. Når jeg prøver:

lcd.print(number + "look"); 

eller

lcd.print("1234 " + number); 

Så er resultatet på LCD-skærmen “34”, da den slettede de to første tal!

Jeg ønsker, at den skal udskrives:

1234 2

Hjælp venligst! Tak!

Svar

Metoden lcd.print() tager en streng eller et tal som et argument, men ikke begge på én gang. Brug af + -operatoren til sammenkædning hører ikke til C-strenge. C-strenge gemmes grundlæggende som pegepinde til strengens første tegn. Så når du prøvede lcd.print("1234 " + number) og fik "34 ", skete der sandsynligvis, at du avancerede markøren og pegede på det første tegn i "1234 " (dvs. “1”) ved number (dvs. 2), hvorved markøren peger på 3. tegn i strengen og dermed lcd.print() viser "34 ". For at udskrive noget, der indeholder både strenge og heltal, er den mest ligefremme måde at konvertere hvert stykke til en Arduino-streng og derefter sammenkæde dem ved hjælp af + -operatoren som du gjorde tidligere.

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

Dette er nogle eksempler. Du kan også bruge til at oprette en tilstrækkelig stor char buffer og bruge sprintf() fra stdio.h til at bygge en streng bestående af heltal og strenge. Slå en lærebog op på C / C ++ for at få flere detaljer.

Svar

Jeg fik det samme problem, og jeg udskrev strengen og heltal på samme linje ved at flytte markøren sådan:

 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

  • Hvad sker der hvis en første fejlkode er, siger 1234, så er en anden 57 … displayet viser " 5734 " ikke?

Svar

Hvad er der galt med dette:

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

Det er antallet af parametre og antagelsen om, at plus sammenkæder strengliteraler.

lcd.print("1234 " + number); 

Dette giver “34”, når tallet er 2 . Hvorfor? Dette er fordi det er resultatet af at tilføje 2 til strengen bogstavelig markør, dvs. strengen starter ved tegnet “3”. Brug i stedet separate udskriftsudsagn:

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

Brug ikke String til at sammenkæde strenge. Det er spild af SRAM, behandling og har en risiko for bunfragmentering. Simpelthen en dårlig idé i små indlejrede systemer som AVR.

For at forstå disse fejl skal du gå tilbage og læse om strenge og strenglitteraler i C / C ++ (sammenlignet 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); 

Outputtet bliver “a = 0, b = 10,01, c = 2”

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *