HOWTO · Arduino
如何在 Arduino 中列印到控制檯
本教程將討論使用 Arduino IDE 的序列監視器在控制檯上列印文字或變數。
本頁內容
控制檯通常被稱為序列監視器,它就像一扇虛擬窗口,讓你能觀察 Arduino 的運行情況。
它讓你能把資訊從微控制器傳送到電腦,並接收返回的資料。這種雙向通訊對於初學者和經驗豐富的 Arduino 愛好者來說都是一個強大的工具。
本教程將討論使用 Arduino IDE 的序列監視器在控制檯上列印文字或變數。從使用 Serial.print() 和 Serial.println() 的基礎開始,我們將逐步深入到更高級的策略,例如利用 Serial.write() 進行二進位資料傳輸。
在 Arduino 中使用序列監視器列印到控制檯
Arduino IDE 底部有一個控制檯,但我們不能在上面列印任何內容。控制檯只是用來顯示程式碼驗證和編譯時的資訊。
控制檯會顯示程式碼的記憶體使用量(以位元組為單位)以及驗證或上傳程式碼時的錯誤。要列印或顯示儲存在變數中的值,我們可以使用 Arduino IDE 的序列監視器。
序列監視器是 Arduino IDE 的一個內建工具,它讓你能與 Arduino 板進行通訊。它提供了一種便捷的方式,把資料從 Arduino 傳送到電腦,並從電腦接收資料到 Arduino。
我們可以使用 Arduino IDE 工具列上的 Tools 選項卡來啟動序列監視器。
在序列監視器上使用 Serial.print() 和 Serial.println() 函式
我們可以使用 Serial.begin() 函式以特定的鮑率或速度開啟序列通訊。我們可以使用 Serial.print() 和 Serial.println() 函式在序列監視器上列印文字和變數。
Serial.print() 和 Serial.println() 的語法:
Serial.print(data);
Serial.println(data);
參數:
data:你要傳送到序列埠的資料。它可以是各種類型,包括整數、浮點數、字元和字串。
附加參數(可選):
format:這個參數允許你指定列印資料的格式。它可以是以下之一:DEC:以十進位數列印。BIN:以二進位數列印。OCT:以八進位數列印。HEX:以十六進位數列印。
Serial.print() 和 Serial.println() 的區別在於:print() 函式會列印變數,且游標停留在同一行;而在 println() 函式中,列印變數後游標會移動到下一行。
例如,我們想把兩個變數列印在同一行,把第三個變數列印在下一行。在這種情況下,我們將使用 print() 函式列印第一個變數,然後使用 println() 函式列印第二個變數並把游標移動到下一行,然後再使用 print() 函式列印第三個變數。
讓我們定義一些變數,並把它們列印在序列監視器上。請看下面的程式碼。
範例:
int My_Int = 10;
unsigned long My_TimeStamp = 1416803716;
const char *My_CharArray = {"This is My_CharArray"};
float My_Float = 3.14159266759;
void setup() {
Serial.begin(9600);
Serial.println(My_Int);
Serial.println(My_TimeStamp);
Serial.println(My_CharArray);
Serial.print(My_Float, 5); // prints to five places right of the decimal
}
void loop() {
// put your code here to run repeatedly
}
這段程式碼首先宣告了幾個不同資料類型的變數。在 setup() 中,序列通訊被設定為 9600 的鮑率。然後,它使用 Serial.print() 和 Serial.println() 列印變數的值。
如果我們只想在序列監視器上列印變數一次,我們可以在 setup() 函式內使用 Serial.print() 函式,因為它只在 Arduino 板通電時運行一次。
如果我們想持續列印一個變數,就必須在 loop() 函式內列印它,因為其中的程式碼會在 Arduino 通電期間循環運行。使用序列監視器,我們可以列印所有資料類型的變數。
輸出:
10
1416803716
This is My_CharArray
3.14159
我們還可以在 Serial.print() 函式中定義第二個參數(就像上面的範例程式碼那樣),它是列印變數值的格式。
例如,對於整數或 long 資料類型,我們可以定義希望以哪種數制顯示,如二進位用 BIN、十進位用 DEC。預設情況下,數字將以十進位數制顯示。
對於浮點數,我們可以定義希望在序列監視器上列印的數字的小數位數。有關 Serial.print() 函式的更多詳細資訊,請查看此連結。
使用 Serial.write() 函式將二進位資料傳送到序列監視器
Serial.print() 函式中的資料將被轉換為 ASCII 表示。如果你想把資料作為位元組流傳送,你可以使用 Serial.write() 函式 來代替 Serial.print() 函式。
在 Arduino 程式設計中,Serial.write() 函式用於透過序列連接傳送二進位資料。它讓你能直接傳送一個位元組或一系列位元組,而不作任何解釋。
當你需要傳輸原始資料或控制代碼時,這尤其有用。
語法:
Serial.write(data);
參數:
data:你要透過序列連接傳送的位元組或資料陣列。它可以是單個位元組(無符號char)或位元組陣列。
附加參數(可選):
length:要從陣列中傳送的位元組數。這個參數在傳送資料陣列時使用。
Serial.write() 能把二進位資料傳送到控制檯。當處理非文字資料或與需要二進位通訊的其他裝置進行交互時,它非常有用。
範例:
void loop() {
byte data[] = {0x48, 0x65, 0x6C, 0x6C, 0x6F}; // ASCII values of "Hello"
Serial.write(data, sizeof(data));
delay(1000);
}
這段程式碼把 'H'、'e'、'l'、'l' 和 'o' 的 ASCII 值逐個傳送到序列監視器,每次傳輸之間有 1 秒的延遲。當你運行這段程式碼並打開序列監視器時,"Hello" 會出現在控制檯中。
結論
總之,列印到控制檯就如同揮舞一個強大的除錯和監視工具。透過本指南,我們探索了使用序列監視器的各種方法,從基礎的 Serial.print() 和 Serial.println() 函式,到使用 Serial.write() 進行二進位資料傳輸等高級策略。
透過理解並有效地利用這些技術,你可以在 Arduino 和電腦之間無縫通訊。這開啟了各種可能性,從即時監視感測器資料,到排查複雜的程式碼邏輯。