在 Arduino 开发中,Serial
是一个非常重要的类,提供了串口通信的基本功能,用于与计算机或其他外部设备进行数据传输。通过 Serial
,你可以实现 串口输出、串口输入、以及与其他硬件的通信(如传感器、显示器等)。
1. Serial
类的基本功能
Serial
是 串口通信 的核心类,提供了很多方法来进行数据发送和接收。通过它,我们可以与 Arduino 板子的串口进行交互。
2. 初始化串口
在程序的 setup()
函数中,需要使用 Serial.begin()
来初始化串口。它的作用是告诉 Arduino 使用哪个波特率进行通信。
示例:初始化串口通信
void setup() {
Serial.begin(9600); // 设置串口波特率为 9600
}
void loop() {
// 你可以在这里进行串口的其他操作
}
9600
是波特率,表示每秒传输 9600 位数据。常见的波特率值有:9600
、115200
、38400
等。
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
,你可以轻松地进行数据输出、输入以及控制。
发表回复