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 monitor in tools tab

Note
我們只能在 Arduino 板連接到 Arduino IDE 時運行序列監視器。

在序列監視器上使用 Serial.print() 和 Serial.println() 函式

我們可以使用 Serial.begin() 函式以特定的鮑率或速度開啟序列通訊。我們可以使用 Serial.print() 和 Serial.println() 函式在序列監視器上列印文字和變數。

Serial.print() 和 Serial.println() 的語法:

Serial.print(data);
Serial.println(data);

參數:

  • data:你要傳送到序列埠的資料。它可以是各種類型,包括整數、浮點數、字元和字串。

附加參數(可選):

  • format:這個參數允許你指定列印資料的格式。它可以是以下之一:
    1. DEC:以十進位數列印。
    2. BIN:以二進位數列印。
    3. OCT:以八進位數列印。
    4. 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 和電腦之間無縫通訊。這開啟了各種可能性,從即時監視感測器資料,到排查複雜的程式碼邏輯。