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

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

回答

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"); 

シリアル出力:

ここに画像の説明を入力

回答

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

Serial.write()

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

シリアル.print()

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

回答

Serial.write送信Serial.printがASCII文字を送信している間、バイトはシリアルポートに送信されるため、ユーザーは簡単に読み取ることができます。

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

回答

上記のすべての例正しいですが、おそらくもっと明確です….シリアルポートを介して送信されるすべてのデータは、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 0011000100110111。これは、printコマンドが最初に任意の数値を文字列表現を行い、コマンドSerial.write()を使用して各文字を個別のASCIIビットとして送信します。

これは完全な説明ではありませんが、お役に立てば幸いです。正しい方向に考えています…

回答

これに答えるもう1つの方法は、Serial.writeが単一を受け入れることを示すことです。 Serial.printが文字列を受け入れる文字。いくつかの違いがあるかもしれませんが、これが主なものです。

コメント

  • Serial.write(stringData.c_str());はどうですか? stringDataがStringとして定義されている場合。
  • stringDataがStringとして定義されている方法を示してください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です