HOWTO · Arduino

Arduino 打印新行

可以使用 Serial.print()或 Serial.println()函数来打印新行。

本页内容

在 Arduino 草图中打印新行时,请在需要结束的文本或数值后调用 Serial.println()。如果下一个值应接在同一行,请使用 Serial.print()。也可以将换行符 \n 传给 Serial.print(),以明确结束当前行。发送数据前,请在 setup() 中调用 Serial.begin(9600) 初始化串口通信。

使用 Serial.println() 结束一行

Serial.println() 会写入参数,然后追加一个换行符。因此,每次调用后,下一段输出都会从新的一行开始。这适用于分别显示读数、状态消息以及其他逐行阅读更方便的值。

下面的独立 C++ 示例使用一个简单的 Serial 替身,因此无需连接 Arduino 开发板也能检查它记录的文本。在开发板上,Arduino 核心库会提供 Serial 并调用 setup();此处展示的草图调用方式与实际使用时相同。运行此示例:

本节中的代码以及显示的标签或输出仍为英文。

#include <cassert>
#include <string>

class SerialPort {
 public:
  std::string data;

  void begin(unsigned long) {}
  void print(const char* value) { data += value; }
  void print(char value) { data += value; }
  void println(const char* value) { data += value; data += '\n'; }
  void println(int value) { data += std::to_string(value); data += '\n'; }
};

SerialPort Serial;

void setup() {
  Serial.begin(9600);
  Serial.println("Arduino is ready");
}

int main() {
  setup();
  assert(Serial.data == "Arduino is ready\n");
}

这个替身会记录文本,而断言会检查 println() 是否追加了换行符。这只是对这些调用方式的 C++ 模型,并非开发板固件。提供的运行案例已通过,退出码为 0,标准输出为空:断言检查的是捕获到的文本,并不会将其打印到标准输出。

使用 Serial.print() 添加换行符

Serial.print() 写入字符后,会让输出位置停在这些字符之后。若要明确结束这一行,请在前面的文本之后,以字符字面量的形式传入换行符 \n。在草图中,可以先调用 Serial.print("Arduino is ready");,再调用 Serial.print('\n');。前一个调用写入消息,后一个调用写入换行符。

在 C++ 中,单引号表示 '\n' 这样的字符,双引号则表示 "Arduino is ready" 这样的字符串。这个区别很重要:换行符是一个字符,而 "\n" 是一个包含该字符的字符串。

跨多行打印多个值

可以组合多个调用,将标签和值放在一起,然后用 Serial.println() 结束这一行。例如,先调用 Serial.print("Temperature: ");,再调用 Serial.println(temperature);;然后对湿度重复使用 Serial.print("Humidity: "); 和 Serial.println(humidity);。使用这些变量前,需在草图中声明它们,例如 int temperature = 25; 和 int humidity = 60;。

每次调用 Serial.print() 都会写入标签,但不会结束当前行。接着调用 Serial.println() 会写入变量值并结束该行。可以直接传入变量;数值格式的选择与换行行为是两回事。这里通过行内示例展示这些额外调用,没有提供第二个完整程序,因此本文不声称这些调用经过了运行验证。

选择合适的串口输出方法

如果希望每条消息或每个读数各占一行,请使用 Serial.println(value)。如果要在同一行组合多个部分,请使用 Serial.print(value),并在这一行完成时调用 Serial.println() 或 Serial.print('\n')。应在 setup() 中调用 Serial.begin(9600),以便草图向串口写入数据前先初始化串口通信。

一种实用写法是先用 Serial.print() 打印标签,再用 Serial.println() 打印对应的值,然后对下一个读数重复此操作。这样标签和值会显示在一起,连续读数也更容易在串口监视器中浏览。提供的独立 C++ 模型运行案例已通过,退出码为 0,标准输出为空;它通过断言验证捕获到的文本,而不会将文本打印到标准输出。