Skriv ut streng og heltall LCD

Hvordan skriver jeg ut en streng og et helt tall på en LCD? Dette er hva jeg har prøvd:

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

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

lcd.print(number + "look"); 

eller

lcd.print("1234 " + number); 

Så blir resultatet på LCD-skjermen «34», da den slettet de to første tallene!

Jeg vil at den skal skrives ut:

1234 2

Vennligst hjelp! Takk!

Svar

lcd.print() -metoden tar en streng eller et tall som et argument, men ikke begge på en gang. Å bruke + -operatøren for sammenføyning er ikke naturlig for C-strenger. C-strenger er i utgangspunktet lagret som pekere til strengens første tegn. Så da du prøvde lcd.print("1234 " + number) og fikk "34 ", skjedde det mest sannsynlig at du avanserte pekeren og pekte på det første tegnet i "1234 " (dvs. «1») av number (dvs. 2), slik at pekeren peker på 3. tegn i strengen og dermed gjør lcd.print() visning "34 ". For å skrive ut noe som inneholder både strenger og heltall, er den enkleste måten å konvertere hvert stykke til en Arduino-streng og deretter sammenkoble dem ved hjelp av + -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 noen eksempler. Du kan også lage en tilstrekkelig stor char buffer og bruke sprintf() fra stdio.h for å bygge en streng som består av heltall og strenger. Slå opp en lærebok på C / C ++ for mer informasjon.

Svar

Jeg fikk det samme problemet og jeg skrev ut strengen og heltallet på samme linje ved å flytte markøren slik:

 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

  • Hva skjer hvis en første feilkode er, si 1234, så er en annen 57 … skjermen vil vise " 5734 " ikke sant?

Svar

Hva er galt med dette:

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

Det er antall parametere og antagelsen at pluss vil sammenkoble strenglitteraler.

lcd.print("1234 " + number); 

Dette gir «34» når tallet er 2 . Hvorfor? Dette er fordi det er resultatet av å legge til 2 til strengens bokstavpeker, dvs. strengen som begynner på tegnet «3». Bruk separate utskriftsuttalelser i stedet:

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

Ikke bruk streng for å sammenkoble strenger. Det er bortkastet SRAM, behandling og har en risiko for haugfragmentering. Rett og slett en dårlig ide i småskala innebygde systemer som AVR.

For å forstå disse feilene, bør du gå tilbake og lese om strenger 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); 

Utgangen blir «a = 0, b = 10,01, c = 2»

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *