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»