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