題:
Serial.write和Serial.print有什麼區別?何時使用它們?
shadab
2015-04-15 12:13:50 UTC
view on stackexchange narkive permalink

Serial.write和Serial.print有什麼區別?何時使用它們?
兩者都曾在串行顯示器上打印,它們的實際區別是什麼?

五 答案:
LoganBlades
2015-04-15 13:08:14 UTC
view on stackexchange narkive permalink

從Arduino站點獲取 Serial.write Serial.print

Serial.write()

將二進制數據寫入串行端口。該數據以字節或一系列字節的形式發送;要發送代表數字數字的字符,請改用print()函數。

Serial.print()

將數據作為人類可讀的ASCII文本打印到串行端口。

Nassim
2017-12-27 12:03:36 UTC
view on stackexchange narkive permalink

Serial.write更加紮實,它簡單而又快速,它可以一次與一個二進製字節進行二進制對話。示例:

  Serial.write(0x45); //將0100 0101寫到電纜上 

Serial.print用途更廣泛,它將為您完成從ASCII到二進制的轉換,也可以轉換為BIN / HEX / OCT / DEC,但您需要指定第二個參數,例如

  Serial.print(76,BIN)給出“ 0100 1100” Serial.print(76,OCT)給出“ 114” Serial .print(“ L”,DEC)給出“ 76” Serial.print(76,HEX)給出“ 4C”  

更多帶有可視串行輸出的示例:

代碼:

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

串行輸出: enter image description here

代碼:

  Serial.print(“ HELLO”);  

串行輸出: enter image description here

Serial.println()將添加第2行字節的末尾0x0D和0x0A,如您在框架中看到的

代碼:

  Serial.println(“ H​​ELLO”);  

串行輸出:

enter image description here

bpinhosilva
2015-04-16 08:18:15 UTC
view on stackexchange narkive permalink

Serial.write 將字節發送到串行端口,而 Serial.print 發送ASCII字符,以便人們可以輕鬆閱讀。

某些設備可以使用字節來設置配置,通常使用數據包,並且您需要使用寫入功能與它們進行通信。最終,它們將通過串行接口發送字節,然後您可以通過遍歷每個字節來進行解釋。

Jerimiah
2018-06-29 16:46:09 UTC
view on stackexchange narkive permalink

以上所有示例都是正確的,但也許更清楚...。通過串行端口發送的所有數據均以1和0發送。 (很明顯。。我希望)...這兩個命令的不同之處在於,實際上是如何將發送的內容與這些1和0相互轉換/解釋。最清楚的例子是傳輸數字。

比方說,您需要發送數字217。此數字的二進制(1和0)表示為11011001。使用命令 Serial.write(217)實際上跨線發送11011001。相同數字的十六進製表示形式是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位發送。

儘管這不是完整的描述,但我希望它幫助您朝正確的方向思考...

linhartr22
2015-04-22 00:24:40 UTC
view on stackexchange narkive permalink

另一種解決方法是聲明Serial.write接受單個字符,而Serial.print接受字符串。可能會有一些差異,但這是主要的差異。

Serial.write(stringData.c_str());呢?如果將stringData定義為String。
請說明如何將stringData定義為String。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...