Kuinka voin tulostaa merkkijonon ja kokonaisluvun nestekidenäytölle? Tässä olen kokeillut:
int number = 2; int result = (number + number); lcd.print(number, DEC + " plus " + number, DEC + " equals " + result, DEC);
Ja tulos on virhe. Kun yritän:
lcd.print(number + "look");
tai
lcd.print("1234 " + number);
Sitten nestekidenäytön tulos on ”34”, koska se poisti kaksi ensimmäistä numeroa!
Haluan sen tulostuvan:
1234 2
Auta! Kiitos!
Vastaus
Menetelmä lcd.print()
vie merkkijonon tai numeron väite, mutta ei molempia kerralla. + -Operaattorin käyttäminen ketjutuksessa ei ole natiivi C-merkkijonoille. C-merkkijonot tallennetaan periaatteessa osoittimina merkkijonon ensimmäiselle merkille. Joten kun yritit lcd.print("1234 " + number)
ja sait "34 "
, mitä todennäköisimmin tapahtui, on, että siirrät osoittimen eteenpäin osoittamalla "1234 "
(eli ”1”) number
(eli 2), jolloin osoitin osoittaa kohtaan Kolmas -merkki merkkijonossa ja siten lcd.print()
-näyttö "34 "
. Jos haluat tulostaa sekä merkkijonoja että kokonaislukuja, yksinkertaisin tapa on muuntaa jokainen kappale Arduino-merkkijonoksi ja liittää ne sitten käyttämällä + -operaattoria kuten aiemmin.
lcd.print(String("1234 ") + String(number)); lcd.print(String(number) + String(" plus ") + String(number) + String(" equals ") + String(result));
Nämä ovat joitain esimerkkejä. Voit myös käyttää luomaan riittävän suuren char
-puskurin ja käyttää rakentamiseen sprintf()
osoitteesta stdio.h
merkkijono, joka koostuu kokonaislukuista ja merkkijonoista. Katso lisätietoja C / C ++: n oppikirjasta.
Vastaus
Minulla on sama ongelma ja tulostin merkkijonon ja samalla rivillä oleva kokonaisluku siirtämällä kohdistinta tällä tavalla:
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);
Kommentit
- Mitä tapahtuu jos ensimmäinen virhekoodi on esimerkiksi 1234, niin toinen on 57 … näytössä näkyy " 5734 " eikö?
Vastaa
Mikä tässä on vikaa:
lcd.print(number, DEC + " plus " + number, DEC + " equals " + result, DEC);
Parametrien lukumäärä ja oletus, että plus yhdistää merkkijonolitraalit.
lcd.print("1234 " + number);
Tämä antaa ”34”, kun numero on 2 . Miksi? Tämä johtuu siitä, että tämä on seurausta lisäämällä merkkijonon literaaliosoittimeen 2 eli merkkijonosta ”3” alkava merkkijono. Käytä sen sijaan erillisiä tulostuslausekkeita:
lcd.print("1234 "); lcd.print(number);
Älä käytä merkkijonoja ketjuun. Se on SRAM: n tuhlausta, käsittelyä ja sillä on kasan pirstoutumisriski. Yksinkertaisesti huono idea pienimuotoisissa sulautetuissa järjestelmissä, kuten AVR.
Näiden virheiden ymmärtämiseksi sinun tulee palata takaisin lukemaan merkkijonoja ja merkkijonoliteraaleja C / C ++: ssa (verrattuna Java :): een.
Kippis!
Vastaus
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);
Lähtö on ”a = 0, b = 10.01, c = 2”