Was ist der Unterschied zwischen Serial.write und Serial.print? Und wann werden sie eingesetzt?
26
Was ist der Unterschied zwischen Serial.write und Serial.print? Und wann werden sie eingesetzt?
Beide wurden verwendet, um auf einem seriellen Monitor zu drucken. Worin bestehen die tatsächlichen Unterschiede?
Schreibt Binärdaten an die serielle Schnittstelle. Diese Daten werden als Byte oder eine Reihe von Bytes gesendet. Verwenden Sie stattdessen die Funktion print (), um die Zeichen zu senden, die die Ziffern einer Zahl darstellen.
Serial.print ()
Druckt Daten als lesbaren ASCII-Text an die serielle Schnittstelle.
Serial.write ist bodenständiger, es ist einfach und schnell, es ist so aufgebaut, dass es byteweise binär spricht. Beispiel:
Serial.write(0x45); // will write 0100 0101 to the cable
Serial.print hingegen ist vielseitiger und führt die Konvertierung von ASCII nach Binär aus. Es kann auch in BIN / HEX / OCT / DEC konvertiert werden. Sie müssen jedoch ein zweites Argument wie dieses angeben
Serial.writeSendet Bytes an die serielle Schnittstelle, während Serial.printASCII-Zeichen gesendet werden, damit die Benutzer leicht lesen können.
Einige Geräte verwenden Bytes, um Konfigurationen festzulegen, verwenden normalerweise Datenpakete und Sie müssen die 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 durchgehen.
Alle obigen Beispiele sind korrekt, aber möglicherweise deutlicher. Alle Daten, die über die serielle Schnittstelle gesendet werden, werden als Einsen und Nullen gesendet. (offensichtlich ... ich hoffe) ... Der Unterschied zwischen den beiden Befehlen besteht darin, wie das, was gesendet wird, tatsächlich in diese Einsen und Nullen übersetzt / interpretiert wird. Das klarste Beispiel ist die Übertragung von Nummern.
Angenommen, Sie müssen die Nummer 217 senden. Die binäre Darstellung (1 und 0) dieser Nummer lautet 11011001. Mit dem Befehl Serial.write(217)wird buchstäblich nur 11011001 über die Leitung gesendet. Die Hex-Darstellung der gleichen Nummer lautet 0xD9, und der Befehl Serial.write(0xD9)sendet dasselbe ... 11011001.
Hier wird es interessant ... Wenn Sie den Befehl verwenden Serial.write("217")würden, würden Sie stattdessen Folgendes erhalten: 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 die gleiche Ausgabe erhalten, wenn Sie Folgendes verwenden würden:
Nun schauen wir uns an Serial.print(). Die Befehle Serial.print(217)oder Serial.print("217")geben beide dasselbe aus: 00110010 00110001 00110111. Dies liegt daran, dass der Druckbefehl zuerst eine beliebige Zahl in eine Zeichenfolgendarstellung konvertiert und dann den Befehl verwendet Serial.write(), um jedes Zeichen als einzelne ASCII-Bits zu senden.
Obwohl dies keine vollständige Beschreibung ist, hoffe ich, dass es Ihnen hilft, in die richtige Richtung zu denken ...
Eine weitere Möglichkeit, dies zu beantworten, besteht darin, anzugeben, dass Serial.write einzelne Zeichen akzeptiert, während Serial.print Zeichenfolgen akzeptiert. Es mag einige Unterschiede geben, aber dies ist der Hauptunterschied.
Antworten:
Von der Arduino-Site für Serial.write und Serial.print :
Serial.write ()
Serial.print ()
quelle
Serial.write ist bodenständiger, es ist einfach und schnell, es ist so aufgebaut, dass es byteweise binär spricht. Beispiel:
Serial.print hingegen ist vielseitiger und führt die Konvertierung von ASCII nach Binär aus. Es kann auch in BIN / HEX / OCT / DEC konvertiert werden. Sie müssen jedoch ein zweites Argument wie dieses angeben
Weitere Beispiele mit visueller serieller Ausgabe:
Code:
SERIELLER AUSGANG:
Code:
SERIELLER AUSGANG:
Serial.println () hingegen fügt das Ende von Zeile 2 Bytes 0x0D und 0x0A hinzu, wie Sie im Frame sehen können
Code:
SERIELLER AUSGANG:
quelle
Serial.write
Sendet Bytes an die serielle Schnittstelle, währendSerial.print
ASCII-Zeichen gesendet werden, damit die Benutzer leicht lesen können.Einige Geräte verwenden Bytes, um Konfigurationen festzulegen, verwenden normalerweise Datenpakete und Sie müssen die 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 durchgehen.
quelle
Alle obigen Beispiele sind korrekt, aber möglicherweise deutlicher. Alle Daten, die über die serielle Schnittstelle gesendet werden, werden als Einsen und Nullen gesendet. (offensichtlich ... ich hoffe) ... Der Unterschied zwischen den beiden Befehlen besteht darin, wie das, was gesendet wird, tatsächlich in diese Einsen und Nullen übersetzt / interpretiert wird. Das klarste Beispiel ist die Übertragung von Nummern.
Angenommen, Sie müssen die Nummer 217 senden. Die binäre Darstellung (1 und 0) dieser Nummer lautet 11011001. Mit dem Befehl
Serial.write(217)
wird buchstäblich nur 11011001 über die Leitung gesendet. Die Hex-Darstellung der gleichen Nummer lautet 0xD9, und der BefehlSerial.write(0xD9)
sendet dasselbe ... 11011001.Hier wird es interessant ... Wenn Sie den Befehl verwenden
Serial.write("217")
würden, würden Sie stattdessen Folgendes erhalten: 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 die gleiche Ausgabe erhalten, wenn Sie Folgendes verwenden würden:
(00110010 00110001 00110111)
Nun schauen wir uns an
Serial.print()
. Die BefehleSerial.print(217)
oderSerial.print("217")
geben beide dasselbe aus: 00110010 00110001 00110111. Dies liegt daran, dass der Druckbefehl zuerst eine beliebige Zahl in eine Zeichenfolgendarstellung konvertiert und dann den Befehl verwendetSerial.write()
, um jedes Zeichen als einzelne ASCII-Bits zu senden.Obwohl dies keine vollständige Beschreibung ist, hoffe ich, dass es Ihnen hilft, in die richtige Richtung zu denken ...
quelle
Eine weitere Möglichkeit, dies zu beantworten, besteht darin, anzugeben, dass Serial.write einzelne Zeichen akzeptiert, während Serial.print Zeichenfolgen akzeptiert. Es mag einige Unterschiede geben, aber dies ist der Hauptunterschied.
quelle