Serial.write和Serial.print有什麼區別?何時使用它們?
兩者都曾在串行顯示器上打印,它們的實際區別是什麼?
Serial.write和Serial.print有什麼區別?何時使用它們?
兩者都曾在串行顯示器上打印,它們的實際區別是什麼?
從Arduino站點獲取 Serial.write和 Serial.print:
Serial.write()
將二進制數據寫入串行端口。該數據以字節或一系列字節的形式發送;要發送代表數字數字的字符,請改用print()函數。
Serial.print()
將數據作為人類可讀的ASCII文本打印到串行端口。
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
代碼:
Serial.print(“ HELLO”);
Serial.println()將添加第2行字節的末尾0x0D和0x0A,如您在框架中看到的
代碼:
Serial.println(“ HELLO”);
串行輸出:
Serial.write
將字節發送到串行端口,而 Serial.print
發送ASCII字符,以便人們可以輕鬆閱讀。
某些設備可以使用字節來設置配置,通常使用數據包,並且您需要使用寫入功能與它們進行通信。最終,它們將通過串行接口發送字節,然後您可以通過遍歷每個字節來進行解釋。
以上所有示例都是正確的,但也許更清楚...。通過串行端口發送的所有數據均以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位發送。
儘管這不是完整的描述,但我希望它幫助您朝正確的方向思考...
另一種解決方法是聲明Serial.write接受單個字符,而Serial.print接受字符串。可能會有一些差異,但這是主要的差異。