Hvad er forskellen mellem Serial.write og Serial.print? Og hvornår bruges de?
Begge er blevet brugt til at udskrive på seriel skærm, hvad er deres faktiske forskelle?
Svar
Serial.write er mere jordnær, det er enkelt og hurtigt, det er lavet til at tale binært, en byte ad gangen. eksempel:
Serial.write(0x45); // will write 0100 0101 to the cable
Serial.print er på den anden side mere alsidig, det vil konvertere for dig fra ASCII til binær, det kan også konvertere til BIN / HEX / OCT / DEC, men du skal angive et andet argument som sådan
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"
flere eksempler med visuel seriel output:
Kode:
Serial.write(0x48); // H Serial.write(0x45); // E Serial.write(0x4C); // L Serial.write(0x4C); // L Serial.write(0x4F); // O
Kode:
Serial.print("HELLO");
Serial.println () på den anden side tilføjer slutningen af linje 2 byte 0x0D og 0x0A som du kan se i rammen
Kode:
Serial.println("HELLO");
SERIEUDGANG:
Svar
Fra Arduino-webstedet til Serial.write og Serial.print :
Serial.write ()
Skriver binære data til den serielle port. Disse data sendes som en byte eller en række bytes; for at sende tegnene, der repræsenterer cifrene i et tal, skal du bruge funktionen print () i stedet.
Serial .print ()
Udskriver data til den serielle port som menneskelig ASCII-tekst.
Svar
Serial.write
sender bytes til den serielle port, mens Serial.print
sender ASCII-tegn, så folk nemt kan læse.
Nogle enheder arbejder med bytes til at indstille konfigurationer, bruger ofte datapakker, og du har brug for skrivefunktion til at kommunikere med dem. Til sidst vil de sende byte gennem seriel grænseflade, og så kan du fortolke ved at gå hver byte.
Svar
Alle eksemplerne ovenfor er korrekte, men måske mere tydeligt …. Alle data, der sendes gennem den serielle port, sendes som 1 “s og 0” s. (indlysende …. håber jeg) … Forskellen i de to kommandoer er, hvordan det, der sendes, faktisk oversættes / fortolkes til / fra disse 1 “og 0”. Det klareste eksempel indebærer transmission af numre.
Lad os sige, at du skal sende nummeret 217. Den binære (1 “s og 0” s) repræsentation af dette nummer er 11011001. Brug kommandoen Serial.write(217)
vil bogstaveligt talt bare sende 11011001 over linjen. Hex-repræsentationen af det samme nummer er 0xD9, og kommandoen Serial.write(0xD9)
sender den samme ting … 11011001.
Her bliver det interessant … Hvis du bruger kommandoen Serial.write("217")
, får du i stedet dette: 00110010 00110001 00110111 … HVAD?!?!?
Når en streng sendes som argumentet, opdeles den i individuelle tegn, konverteres til ASCII og sendes derefter som en byte for hvert tegn. Du får nøjagtigt den samme output, hvis du bruger følgende:
Serial.write(50); Serial.write(51); Serial.write(55);
(00110010 00110001 00110111)
Lad os nu se på Serial.print()
. Kommandoerne Serial.print(217)
eller Serial.print("217")
vil begge udskrive det samme: 00110010 00110001 00110111. Dette skyldes, at printkommandoen først konverterer ethvert tal til et strengrepræsentation og bruger derefter kommandoen Serial.write()
til at sende hvert tegn som individuelle ASCII-bits.
Selvom dette ikke er en Fuldstændig beskrivelse, håber jeg, det hjælper med at få dig tænker i den rigtige retning …
Svar
Endnu en anden måde at svare på dette er at angive, at Serial.write accepterer single tegn, hvor Serial.print accepterer strenge. Der kan være nogle forskelle, men dette er den vigtigste.
Serial.write(stringData.c_str());
? hvis stringData er defineret som String.