Vad är skillnaden mellan Serial.write och Serial.print? Och när används de?

Vad är skillnaden mellan Serial.write och Serial.print? Och när används de?
Båda har använts för att skriva ut på seriell bildskärm, vilka är deras faktiska skillnader?

Svar

Serial.write är mer jordnära, det är enkelt och snabbt, det är gjort för att prata binärt, en byte i taget. exempel:

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

Serial.print å andra sidan är mer mångsidig, det kommer att göra omvandlingen för dig från ASCII till binär, det kan också konvertera till BIN / HEX / OCT / DEC men du måste ange ett andra argument så

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" 

fler exempel med visuell seriell utgång:

Kod:

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

SERIALUTGÅNG: ange bildbeskrivning här

Kod:

 Serial.print("HELLO"); 

SERIALUTGÅNG: ange bildbeskrivning här

Serial.println () å andra sidan lägger till slutet av rad 2 byte 0x0D och 0x0A som du kan se i ramen

Kod:

 Serial.println("HELLO"); 

SERIALUTGÅNG:

ange bildbeskrivning här

Svar

Från Arduino-webbplatsen för Serial.write och Serial.print :

Serial.write ()

Skriver binär data till den seriella porten. Dessa data skickas som en byte eller en serie byte; för att skicka tecknen som representerar siffrorna i ett nummer använder du funktionen print () istället.

Seriell .print ()

Skriver ut data till serieporten som läsbar ASCII-text.

Svar

Serial.write skickar byte till den seriella porten medan Serial.print skickar ASCII-tecken så att människor lätt kan läsa.

Vissa enheter arbetar med byte för att ställa in konfigurationer, använder ofta datapaket och du måste använda skrivfunktionen för att kommunicera med dem. Så småningom kommer de att skicka byte via det seriella gränssnittet och sedan kan du tolka genom att gå varje byte.

Svar

Alla exemplen ovan är korrekta, men kanske tydligare …. All data som skickas via den seriella porten skickas som 1 ”s och 0” s. (uppenbart …. jag hoppas) … Skillnaden i de två kommandona är hur allt som skickas faktiskt översätts / tolkas till / från dessa 1 ”och 0”. Det tydligaste exemplet handlar om att sända nummer.

Låt oss säga att du måste skicka siffran 217. Den binära (1 ”s och 0”) representationen för detta nummer är 11011001. Använd kommandot Serial.write(217) skickar bokstavligen bara 11011001 över linjen. Hexrepresentationen för samma nummer är 0xD9 och kommandot Serial.write(0xD9) skickar samma sak … 11011001.

Här blir det intressant … Om du skulle använda kommandot Serial.write("217") skulle du istället få det här: 00110010 00110001 00110111 … VAD?!?!?
När en sträng skickas som argument delas den upp i enskilda tecken, konverteras till ASCII och skickas sedan som en byte för varje tecken. Du skulle få exakt samma utdata om du skulle använda följande:

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

(00110010 00110001 00110111)

Låt oss nu titta på Serial.print(). Kommandona Serial.print(217) eller Serial.print("217") kommer båda att skriva ut samma sak: 00110010 00110001 00110111. Detta beror på att utskriftskommandot först konverterar valfritt tal till ett strängrepresentation och använder sedan kommandot Serial.write() för att skicka varje tecken som enskilda ASCII-bitar.

Även om detta inte är en KOMPLET beskrivning hoppas jag att det hjälper dig tänker i rätt riktning …

Svar

Ännu ett sätt att svara på detta är att säga att Serial.write accepterar enstaka tecken där Serial.print accepterar strängar. Det kan finnas vissa skillnader men det här är den viktigaste.

Kommentarer

  • Vad sägs om Serial.write(stringData.c_str());? om stringData definieras som String.
  • Visa hur stringData definieras som String.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *