在 Arduino 开发中,Serial 是一个非常重要的类,提供了串口通信的基本功能,用于与计算机或其他外部设备进行数据传输。通过 Serial,你可以实现 串口输出串口输入、以及与其他硬件的通信(如传感器、显示器等)。

1. Serial 类的基本功能

Serial 是 串口通信 的核心类,提供了很多方法来进行数据发送和接收。通过它,我们可以与 Arduino 板子的串口进行交互。


2. 初始化串口

在程序的 setup() 函数中,需要使用 Serial.begin() 来初始化串口。它的作用是告诉 Arduino 使用哪个波特率进行通信。

示例:初始化串口通信

void setup() {
  Serial.begin(9600);  // 设置串口波特率为 9600
}

void loop() {
  // 你可以在这里进行串口的其他操作
}

  • 9600 是波特率,表示每秒传输 9600 位数据。常见的波特率值有:960011520038400 等。

3. 串口输出函数

3.1 Serial.print()

  • 用于在串口监视器中打印文本或数值。不会换行。
Serial.print("Hello, Arduino!");
Serial.print(123);

  • 示例:打印字符串和数值
Serial.print("Temperature: ");
Serial.print(25.6);  // 打印温度数值

3.2 Serial.println()

  • 功能和 Serial.print() 类似,但会在输出后添加换行符。
Serial.println("Hello, World!");
Serial.println(123);

  • 示例:打印带换行的字符串和数值
Serial.println("Temperature: ");
Serial.println(25.6);  // 打印温度数值并换行


4. 串口输入函数

4.1 Serial.read()

  • 从串口接收一个字节数据。
  • 如果没有接收到数据,它会返回 -1
int value = Serial.read();  // 读取一个字节

  • 示例:读取数据并打印
void loop() {
  if (Serial.available() > 0) {  // 检查是否有数据可读
    int receivedByte = Serial.read();  // 读取一个字节
    Serial.print("Received: ");
    Serial.println(receivedByte);
  }
}

4.2 Serial.available()

  • 检查串口接收缓冲区中是否有数据。如果有数据,返回大于 0 的值。
int available = Serial.available();  // 返回串口数据字节的数量

4.3 Serial.readString()

  • 用于从串口读取一个字符串,直到遇到换行符(\n)为止。
  • 适用于读取输入的字符串。
String str = Serial.readString();

  • 示例:读取一个字符串
void loop() {
  if (Serial.available() > 0) {
    String input = Serial.readString();  // 读取完整的字符串
    Serial.print("You typed: ");
    Serial.println(input);
  }
}

4.4 Serial.parseInt()

  • 用于从串口读取一个整数,直到遇到非数字字符为止。
int value = Serial.parseInt();  // 读取整数


5. 串口控制函数

5.1 Serial.flush()

  • 等待直到发送缓存区的所有数据都发送完毕。通常在发送大量数据时使用,确保数据被完全发送。
Serial.flush();

5.2 Serial.end()

  • 停止串口通信并释放资源。常用于串口不再使用时关闭串口。
Serial.end();


6. 常见使用场景

6.1 输出调试信息

在开发过程中,Serial.print() 和 Serial.println() 常常用于输出调试信息到串口监视器。

void setup() {
  Serial.begin(9600);
  Serial.println("Starting the program...");
}

void loop() {
  int sensorValue = analogRead(A0);
  Serial.print("Sensor value: ");
  Serial.println(sensorValue);
  delay(1000);
}

6.2 接收数据控制 LED

通过串口发送控制字符来控制 LED 状态。

int ledPin = 13;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
    char incomingByte = Serial.read();
    if (incomingByte == '1') {
      digitalWrite(ledPin, HIGH);  // 开灯
    } else if (incomingByte == '0') {
      digitalWrite(ledPin, LOW);   // 关灯
    }
  }
}


7. 其他有用的串口函数

7.1 Serial.peek()

  • 返回串口缓冲区中的下一个字节,但不会从缓冲区中移除它。
int nextByte = Serial.peek();  // 返回下一个字节,但不移除

7.2 Serial.setTimeout()

  • 设置串口读取超时时间,单位为毫秒。该方法会影响 Serial.readString() 等函数。
Serial.setTimeout(1000);  // 设置超时时间为 1000 毫秒


8. 总结

  • Serial.begin():初始化串口通信并指定波特率。
  • Serial.print() / Serial.println():用于打印数据到串口监视器,println 会自动换行。
  • Serial.available():检查是否有数据可读。
  • Serial.read():读取一个字节的数据。
  • Serial.readString():读取一个完整的字符串,直到遇到换行符为止。
  • Serial.parseInt():读取整数数据。
  • Serial.flush():等待串口缓冲区中的数据被发送完毕。

Serial 类是 Arduino 编程中最基本且重要的工具,能帮助我们进行调试、与计算机通信以及接收外部设备的数据。通过 Serial,你可以轻松地进行数据输出、输入以及控制。