Wat is het verschil tussen Serial.write en Serial.print? En wanneer worden ze gebruikt?

Wat is het verschil tussen Serial.write en Serial.print? En wanneer worden ze gebruikt?
Beide zijn gebruikt om af te drukken op een seriële monitor, wat zijn de werkelijke verschillen?

Antwoord

Serial.write is meer nuchter, het is eenvoudig en snel, het is gemaakt om binair te praten, byte voor byte. voorbeeld:

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

Serial.print daarentegen is veelzijdiger, het zal de conversie voor u doen van ASCII naar binair het kan ook naar BIN / HEX / OCT / DEC maar je moet een tweede argument specificeren zoals dit

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" 

meer voorbeelden met visuele seriële uitvoer:

Code:

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

SERIËLE UITVOER: voer hier de beschrijving van de afbeelding in

Code:

 Serial.print("HELLO"); 

SERIËLE UITGANG: voer hier een afbeeldingbeschrijving in

Serial.println () voegt daarentegen 2 bytes 0x0D en 0x0A aan het einde van de regel toe, zoals je kunt zien in het frame

Code:

 Serial.println("HELLO"); 

SERIËLE UITGANG:

voer de beschrijving van de afbeelding hier in

Answer

Van de Arduino-site voor Serial.write en Serial.print :

Serial.write ()

Schrijft binaire gegevens naar de seriële poort. Deze gegevens worden verzonden als een byte of een reeks bytes; gebruik in plaats daarvan de functie print () om de tekens te verzenden die de cijfers van een getal vertegenwoordigen.

Serieel .print ()

Drukt gegevens af naar de seriële poort als voor mensen leesbare ASCII-tekst.

Antwoord

Serial.write verzendt bytes naar de seriële poort, terwijl Serial.print ASCII-tekens verzendt zodat mensen gemakkelijk kunnen lezen.

Sommige apparaten gebruiken bytes om configuraties in te stellen, gebruiken gewoonlijk gegevenspakketten en u moet de schrijffunctie gebruiken om met hen te communiceren. Uiteindelijk sturen ze bytes via de seriële interface en dan kun je interpreteren door elke byte te gebruiken.

Answer

Alle bovenstaande voorbeelden zijn correct, maar misschien duidelijker …. Alle gegevens die via de seriële poort worden verzonden, worden verzonden als 1 “s en 0” s. (voor de hand liggend …. hoop ik) … Het verschil tussen de twee commandos is hoe alles wat wordt verzonden, daadwerkelijk wordt vertaald / geïnterpreteerd naar / van deze 1 “s en 0” s. Het duidelijkste voorbeeld betreft het verzenden van nummers.

Stel dat u het nummer 217 moet verzenden. De binaire (1 “s en 0” s) representatie van dit nummer is 11011001. Met het commando Serial.write(217) stuurt letterlijk 11011001 over de regel. De hex-weergave van hetzelfde nummer is 0xD9, en het commando Serial.write(0xD9) zal hetzelfde verzenden … 11011001.

Hier wordt het interessant … Als je het commando Serial.write("217") zou gebruiken, zou je in plaats daarvan dit krijgen: 00110010 00110001 00110111 … WAT?!?!?
Wanneer een string wordt doorgegeven als argument, wordt deze opgesplitst in individuele karakters, geconverteerd naar ASCII, en dan verzonden als byte voor elk karakter. Je zou exact dezelfde output krijgen als je het volgende zou gebruiken:

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

(00110010 00110001 00110111)

Laten we nu eens kijken naar Serial.print(). De opdrachten Serial.print(217) of Serial.print("217") zullen beide hetzelfde afdrukken: 00110010 00110001 00110111. Dit komt doordat de afdrukopdracht eerst een willekeurig getal omzet in een tekenreeksweergave en gebruikt vervolgens het commando Serial.write() om elk teken als individuele ASCII-bits te verzenden.

Hoewel dit geen VOLLEDIGE beschrijving is, hoop ik dat het je helpt denken in de goede richting …

Answer

Nog een andere manier om dit te beantwoorden is door te stellen dat Serial.write single accepteert tekens waarbij Serial.print tekenreeksen accepteert. Er kunnen enkele verschillen zijn, maar dit is de belangrijkste.

Reacties

  • Hoe zit het met Serial.write(stringData.c_str());? als stringData is gedefinieerd als String.
  • Laat zien hoe stringData is gedefinieerd als String.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *