Serial.writeとSerial.printの違いは何ですか?そして、いつ使用されますか?


26

Serial.writeとSerial.printの違いは何ですか?そして、いつ使用されますか?
どちらもシリアルモニターでの印刷に使用されていますが、実際の違いは何ですか?


優れた説明bpinhosilva!あなたは私が今非常にはっきりと苦労していたことを理解するのを助けました。
ロリー

回答:


19

Serial.writeおよびSerial.printの Arduinoサイトから:

Serial.write()

バイナリデータをシリアルポートに書き込みます。このデータは、1バイトまたは一連のバイトとして送信されます。数字の桁を表す文字を送信するには、代わりにprint()関数を使用します。

Serial.print()

データを人間が読めるASCIIテキストとしてシリアルポートに出力します。


17

Serial.writeはより現実的なものであり、シンプルで高速であり、一度に1バイトずつバイナリを話すように作られています。例:

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

一方、Serial.printはより用途が広く、ASCIIからバイナリへの変換を行います。BIN/ HEX / OCT / DECに変換することもできますが、2番目の引数を指定する必要があります

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" 

視覚的なシリアル出力を使用したその他の例:

コード:

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

シリアル出力: ここに画像の説明を入力してください

コード:

  Serial.print("HELLO");

シリアル出力: ここに画像の説明を入力してください

一方、Serial.println()は、フレームに表示されているように行末2バイト0x0Dおよび0x0Aを追加します

コード:

  Serial.println("HELLO");

シリアル出力:

ここに画像の説明を入力してください


7

Serial.writeシリアルポートにバイトを送信し、Serial.printASCII文字を送信して、人々が簡単に読めるようにします。

一部のデバイスは、バイトを使用して構成を設定し、一般的にデータのパケットを使用するため、書き込み機能を使用してそれらと通信する必要があります。最終的にはシリアルインターフェイスを介してバイトを送信し、各バイトに移動して解釈できます。


5

上記の例はすべて正しいですが、より明確な場合があります。...シリアルポートを介して送信されるすべてのデータは、1と0として送信されます。(明らかです...願っています)... 2つのコマンドの違いは、送信されるものが実際にこれらの1と0に/から翻訳される/解釈される方法です。最も明確な例には、番号の送信が含まれます。

番号217を送信する必要があるとしましょう。この番号のバイナリ(1と0)表現は11011001 Serial.write(217)です。コマンドを使用すると、文字通り11011001を行に送信します。同じ番号の16進表現は0xD9であり、コマンドSerial.write(0xD9)は同じものを送信します... 11011001。

ここが面白いところです...コマンドを使用する場合、Serial.write("217")代わりにこれを取得します:00110010 00110001 00110111 ...何?!?!?
文字列が引数として渡されると、個々の文字に分解され、ASCIIに変換されてから、各文字のバイトとして送信されます。以下を使用する場合、まったく同じ出力が得られます。

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

(00110010 00110001 00110111)

を見てみましょうSerial.print()。コマンドは、Serial.print(217)またはSerial.print("217")両方同じものを出力します:00110010 00110001 00110111. printコマンドは、最初の文字列表現に任意の数を変換してから、コマンドを使用していますので、これはSerial.write()、個々のASCIIビットとして各文字を送信します。

これは完全な説明ではありませんが、正しい方向に考えさせるのに役立つと思います...


3

これに答えるさらに別の方法は、Serial.printが文字列を受け入れる場合に、Serial.writeが単一文字を受け入れることを述べることです。いくつかの違いがありますが、これが主な違いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.