Was ist der Unterschied zwischen Serial.write und Serial.print? Und wann werden sie verwendet?

Was ist der Unterschied zwischen Serial.write und Serial.print? Und wann werden sie verwendet?
Beide wurden zum Drucken auf einem seriellen Monitor verwendet. Was sind ihre tatsächlichen Unterschiede?

Antwort

Serial.write ist bodenständiger, es ist einfach und schnell, es wird gemacht, um binär zu sprechen, ein Byte nach dem anderen. Beispiel:

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

Serial.print ist dagegen vielseitiger. Es führt für Sie die Konvertierung von ASCII in Binärdateien durch und kann auch in BIN / konvertieren. HEX / OCT / DEC, aber Sie müssen ein zweites Argument wie folgt angeben:

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" 

Weitere Beispiele mit visueller serieller Ausgabe:

Code:

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

SERIENAUSGABE: Geben Sie hier die Bildbeschreibung ein

Code:

 Serial.print("HELLO"); 

SERIENAUSGABE: Geben Sie hier die Bildbeschreibung ein.

Serial.println () fügt dagegen das Ende der Zeile 2 Byte 0x0D und 0x0A hinzu, wie Sie im Rahmen sehen können

Code:

 Serial.println("HELLO"); 

SERIAL OUTPUT:

Geben Sie hier die Bildbeschreibung ein.

Antwort

Von der Arduino-Site für Serial.write und Serial.print :

Serial.write ()

Schreibt Binärdaten auf die serielle Schnittstelle. Diese Daten werden als Byte oder Reihe von Bytes gesendet. Verwenden Sie stattdessen die Funktion print (), um die Zeichen zu senden, die die Ziffern einer Zahl darstellen.

Seriell .print ()

Druckt Daten als lesbaren ASCII-Text an die serielle Schnittstelle.

Antwort

Serial.write sendet Bytes an die serielle Schnittstelle, während Serial.print ASCII-Zeichen sendet, damit Benutzer leicht lesen können.

Einige Geräte verwenden Bytes zum Festlegen von Konfigurationen, verwenden häufig Datenpakete und Sie müssen Schreibfunktion verwenden, um mit ihnen zu kommunizieren. Schließlich senden sie Bytes über die serielle Schnittstelle, und Sie können sie interpretieren, indem Sie jedes Byte durchlaufen.

Antwort

Alle obigen Beispiele sind korrekt, aber vielleicht klarer …. Alle Daten, die über die serielle Schnittstelle gesendet werden, werden als 1 „s und 0“ s gesendet. (offensichtlich … ich hoffe) … Der Unterschied zwischen den beiden Befehlen besteht darin, wie alles, was gesendet wird, tatsächlich zu / von diesen 1 „s und 0“ s übersetzt / interpretiert wird. Das klarste Beispiel ist die Übertragung von Nummern.

Nehmen wir an, Sie müssen die Nummer 217 senden. Die binäre Darstellung (1 „s und 0“ s) dieser Nummer lautet 11011001. Verwenden Sie den Befehl Serial.write(217) sendet buchstäblich nur 11011001 über die Leitung. Die Hex-Darstellung derselben Nummer ist 0xD9, und der Befehl Serial.write(0xD9) sendet dasselbe … 11011001.

Hier wird es interessant … Wenn Sie den Befehl Serial.write("217") verwenden würden, erhalten Sie stattdessen Folgendes: 00110010 00110001 00110111 … WAS?!?!?
Wenn eine Zeichenfolge als Argument übergeben wird, wird sie in einzelne Zeichen zerlegt, in ASCII konvertiert und dann als Byte für jedes Zeichen gesendet. Sie würden genau dieselbe Ausgabe erhalten, wenn Sie Folgendes verwenden würden:

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

(00110010 00110001 00110111)

Schauen wir uns nun Serial.print() an. Die Befehle Serial.print(217) oder Serial.print("217") drucken beide dasselbe: 00110010 00110001 00110111. Dies liegt daran, dass der Druckbefehl zuerst eine beliebige Zahl in a konvertiert Zeichenfolgendarstellung und verwendet dann den Befehl Serial.write(), um jedes Zeichen als einzelne ASCII-Bits zu senden.

Obwohl dies keine KOMPLETTE Beschreibung ist, hoffe ich, dass es hilfreich ist, Sie zu erreichen in die richtige Richtung denken …

Antwort

Eine weitere Möglichkeit, dies zu beantworten, besteht darin, anzugeben, dass Serial.write Single akzeptiert Zeichen, bei denen Serial.print Zeichenfolgen akzeptiert. Es kann einige Unterschiede geben, aber dies ist der Hauptunterschied.

Kommentare

  • Was ist mit Serial.write(stringData.c_str());? Wenn stringData als String definiert ist.
  • Bitte zeigen Sie, wie stringData als String definiert ist.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.