Mitä eroa on Serial.write ja Serial.print? Ja milloin niitä käytetään?
Molempia on käytetty tulostamiseen sarjavalvontaan, mitkä ovat niiden todelliset erot?
Vastaus
Serial.write on maanläheisempi, se on yksinkertainen ja nopea, se on tarkoitettu puhumaan binaarisesti yksi tavu kerrallaan. Esimerkki:
Serial.write(0x45); // will write 0100 0101 to the cable
Serial.print on toisaalta monipuolisempi, se tekee muunnoksen puolestasi ASCII: sta binaariksi, ja se voi myös muuntaa BIN: ksi / HEX / OCT / DEC, mutta sinun on määritettävä toinen argumentti, kuten
Serial.print(76, BIN) gives "0100 1100" Serial.print(76, OCT) gives "114" Serial.print("L", DEC) gives "76" Serial.print(76, HEX) gives "4C"
lisää esimerkkejä visuaalisella sarjalähdöllä:
Koodi:
Serial.write(0x48); // H Serial.write(0x45); // E Serial.write(0x4C); // L Serial.write(0x4C); // L Serial.write(0x4F); // O
Koodi:
Serial.print("HELLO");
Serial.println () toisaalta lisää rivin 2 tavun 0x0D ja 0x0A loppuun, kuten näet kehyksestä
Koodi:
Serial.println("HELLO");
SARJALÄHTÖ:
Vastaus
Arduino-sivustolta Serial.write ja Sarja.tulos :
Sarja.write ()
Kirjoittaa binääridataa sarjaporttiin. Nämä tiedot lähetetään tavuina tai tavuina; Jos haluat lähettää numeron numeroita edustavat merkit, käytä sen sijaan print () -toimintoa.
Sarja .print ()
Tulostaa tiedot sarjaporttiin ihmisen luettavana ASCII-tekstinä.
vastaus
Serial.write
lähettää tavua sarjaporttiin, kun taas Serial.print
lähettää ASCII-merkkejä, jotta ihmiset voivat lukea helposti.
Jotkut laitteet käyttävät tavuja asetusten määrittämiseen, käyttävät yleisesti datapaketteja ja sinä täytyy kommunikoida heidän kanssaan kirjoitustoiminnolla. Lopulta he lähettävät tavuja sarjaliittymän kautta, ja sitten voit tulkita menemällä jokaiseen tavuun.
Vastaa
Kaikki yllä olevat esimerkit ovat oikeita, mutta ehkä selvemmin …. Kaikki sarjaportin kautta lähetetyt tiedot lähetetään muodossa 1 ”s” ja 0 ”s. (ilmeinen …. toivottavasti) … Ero näissä kahdessa komennossa on se, miten lähetetty käännetään / tulkitaan näihin 1 ”ja 0” s: iin. Selkein esimerkki liittyy numeroiden lähettämiseen.
Sanotaan, että sinun on lähetettävä numero 217. Tämän numeron binaarinen (1 ”ja 0” s) edustus on 11011001. Käyttäen komentoa Serial.write(217)
lähettää kirjaimellisesti vain 11011001 rivin yli. Saman numeron Hex-esitys on 0xD9, ja komento Serial.write(0xD9)
lähettää saman … 11011001.
Täältä saa mielenkiintoista … Jos haluat käyttää komentoa Serial.write("217")
, saat sen sijaan tämän: 00110010 00110001 00110111 … MITÄ?!?!?
Kun merkkijono välitetään argumenttina, se jaetaan yksittäisiin merkkeihin, muunnetaan ASCII: ksi ja lähetetään sitten tavuksi jokaiselle merkille. Saat täsmälleen saman tuloksen, jos käytät seuraavaa:
Serial.write(50); Serial.write(51); Serial.write(55);
(00110010 00110001 00110111)
Katsotaanpa nyt Serial.print()
. Komennot Serial.print(217)
tai Serial.print("217")
tulostavat molemmat saman: 00110010 00110001 00110111. Tämä johtuu siitä, että tulostuskomento muuntaa minkä tahansa luvun ensin merkkijonoesitys ja käyttää sitten komentoa Serial.write()
jokaisen merkin lähettämiseen yksittäisinä ASCII-bitteinä.
Vaikka tämä ei ole TÄYDELLINEN kuvaus, toivon, että se auttaa sinua saamaan sinut ajattelu oikeaan suuntaan …
Vastaa
Vielä yksi tapa vastata tähän on sanoa, että Serial.write hyväksyy yhden merkkejä, joissa Serial.print hyväksyy merkkijonot. Eroja voi olla, mutta tämä on tärkein.
Serial.write(stringData.c_str());
? jos stringData määritellään merkkijonoksi.