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 和计算机之间无缝通信。这开启了各种可能性,从实时监视传感器数据,到排查复杂的代码逻辑。