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として定義されている場合。