Tulosta merkkijono ja kokonaisluku LCD

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”

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *