Hva er forskjellen mellom Serial.write og Serial.print? Og når brukes de?

Hva er forskjellen mellom Serial.write og Serial.print? Og når brukes de?
Begge har blitt brukt til å skrive ut på seriell skjerm, hva er de faktiske forskjellene?

Svar

Serial.write er mer jordnær, det er enkelt og raskt, det er laget for å snakke binært, en byte om gangen. eksempel:

Serial.write(0x45); // will write 0100 0101 to the cable 

Serial.print er derimot mer allsidig, det vil gjøre konverteringen for deg fra ASCII til binær, den kan også konvertere til BIN / HEX / OCT / DEC, men du må angi et annet argument slik

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 visuell seriell utgang:

Kode:

 Serial.write(0x48); // H Serial.write(0x45); // E Serial.write(0x4C); // L Serial.write(0x4C); // L Serial.write(0x4F); // O 

SERIELL UTGANG: skriv inn bildebeskrivelse her

Kode:

 Serial.print("HELLO"); 

SERIEUTGANG: skriv inn bildebeskrivelse her

Serial.println () vil derimot legge til slutten av linje 2 byte 0x0D og 0x0A som du kan se i rammen

Kode:

 Serial.println("HELLO"); 

SERIELL UTGANG:

skriv inn bildebeskrivelse her

Svar

Fra Arduino-nettstedet for Serial.write og Serial.print :

Serial.write ()

Skriver binære data til den serielle porten. Disse dataene sendes som en byte eller byteserie; for å sende tegnene som representerer sifrene i et tall, bruk utskriftsfunksjonen () i stedet.

Serial .print ()

Skriver ut data til serieporten som lesbar ASCII-tekst.

Svar

Serial.write sender byte til den serielle porten mens Serial.print sender ASCII-tegn slik at folk lett kan lese.

Noen enheter fungerer ved hjelp av byte for å angi konfigurasjoner, bruker ofte pakker med data og du trenger å bruke skrivefunksjon for å kommunisere med dem. Til slutt vil de sende byte gjennom det serielle grensesnittet, og så kan du tolke ved å gå hver byte.

Svar

Alle eksemplene ovenfor er korrekte, men kanskje tydeligere …. Alle data som sendes gjennom serieporten sendes som 1 «s og 0» s. (åpenbart …. håper jeg) … Forskjellen i de to kommandoene er hvordan det som sendes faktisk blir oversatt / tolket til / fra disse 1 «og 0». Det klareste eksemplet innebærer å sende tall.

La oss si at du må sende tallet 217. Den binære (1 «s og 0» s) representasjonen av dette tallet er 11011001. Bruk kommandoen Serial.write(217) vil bokstavelig talt bare sende 11011001 over linjen. Hex-representasjonen av det samme tallet er 0xD9, og kommandoen Serial.write(0xD9) vil sende det samme … 11011001.

Her blir det interessant … Hvis du bruker kommandoen Serial.write("217"), vil du i stedet få dette: 00110010 00110001 00110111 … HVA?!?!?
Når en streng sendes som argument, blir den delt inn i individuelle tegn, konvertert til ASCII, og deretter sendt som en byte for hvert tegn. Du vil få nøyaktig samme utdata hvis du bruker følgende:

Serial.write(50); Serial.write(51); Serial.write(55); 

(00110010 00110001 00110111)

La oss nå se på Serial.print(). Kommandoene Serial.print(217) eller Serial.print("217") vil begge skrive ut det samme: 00110010 00110001 00110111. Dette skyldes at utskriftskommandoen først konverterer hvilket som helst tall til et strengrepresentasjon og bruker deretter kommandoen Serial.write() for å sende hvert tegn som individuelle ASCII-biter.

Selv om dette ikke er en KOMPLETT beskrivelse, håper jeg det hjelper å få deg tenker i riktig retning …

Svar

Nok en annen måte å svare på dette er å si at Serial.write godtar enkelt tegn der Serial.print godtar strenger. Det kan være noen forskjeller, men dette er den viktigste.

Kommentarer

  • Hva med Serial.write(stringData.c_str());? hvis stringData er definert som String.
  • Vennligst vis hvordan stringData er definert som String.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *