Arduino 第五章:串口输入和输出
引言
在 Arduino 的学习进程中,我们已经掌握了数字输出等基础操作。而串口通信,作为 Arduino 与外部设备进行数据交互的重要手段,是迈向更复杂项目的关键一步。串口通信就像是 Arduino 的“嘴巴”和“耳朵”,让它能够与计算机、传感器、其他微控制器等设备进行信息的传递和交流。在这第五章中,我们将深入探讨 Arduino 的串口输入和输出功能。
串口通信基础概念
什么是串口通信
串口通信(Serial Communication)是一种在一条通信线路上逐位传输数据的通信方式。它具有简单、可靠、成本低等优点,广泛应用于各种电子设备之间的数据传输。在 Arduino 中,串口通信主要通过 TX(发送)和 RX(接收)引脚来实现。
波特率
波特率(Baud Rate)是串口通信中的一个重要概念,它表示每秒传输的比特数。常见的波特率有 9600、115200 等。在进行串口通信时,通信双方(如 Arduino 和计算机)必须设置相同的波特率,否则数据传输将出现错误。
Arduino 串口输出
硬件连接
对于 Arduino Uno 等常见开发板,只需要通过 USB 线将 Arduino 连接到计算机即可。USB 线不仅为 Arduino 提供电源,还实现了 Arduino 与计算机之间的串口通信。
代码实现
以下是一个简单的 Arduino 串口输出示例代码:
void setup() {
// 初始化串口通信,设置波特率为 9600
Serial.begin(9600);
}
void loop() {
// 向串口发送字符串
Serial.println("Hello, Serial Communication!");
// 延迟 1 秒
delay(1000);
}
代码解释
setup()
函数:在程序启动时,Serial.begin(9600)
用于初始化串口通信,并将波特率设置为 9600。这一步是使用串口输出的必要操作。loop()
函数:Serial.println("Hello, Serial Communication!")
用于向串口发送字符串,并在末尾添加换行符。delay(1000)
使程序暂停 1 秒,这样每隔 1 秒就会发送一次字符串。
查看串口输出
将上述代码上传到 Arduino 后,打开 Arduino IDE 中的串口监视器。在串口监视器中,将波特率设置为与代码中相同的 9600,就可以看到 Arduino 不断发送的字符串信息。
Arduino 串口输入
硬件连接
同样,使用 USB 线将 Arduino 连接到计算机即可。
代码实现
以下是一个简单的 Arduino 串口输入示例代码:
void setup() {
// 初始化串口通信,设置波特率为 9600
Serial.begin(9600);
}
void loop() {
// 检查串口是否有数据输入
if (Serial.available() > 0) {
// 读取串口输入的一个字符
char incomingChar = Serial.read();
// 将读取的字符回显到串口监视器
Serial.print("You sent: ");
Serial.println(incomingChar);
}
}
代码解释
setup()
函数:与串口输出示例一样,使用Serial.begin(9600)
初始化串口通信。loop()
函数:Serial.available()
用于检查串口缓冲区中是否有可用的数据。如果有数据(返回值大于 0),则使用Serial.read()
读取一个字符,并将其存储在incomingChar
变量中。然后使用Serial.print()
和Serial.println()
将读取的字符回显到串口监视器。
测试串口输入
将上述代码上传到 Arduino 后,打开串口监视器,将波特率设置为 9600。在串口监视器的输入框中输入字符,按下回车键,就可以看到 Arduino 将输入的字符回显出来。
综合应用:根据串口输入控制 LED 灯
硬件连接
将一个 LED 灯的负极连接到 Arduino 的 GND 引脚,正极通过一个 220Ω 电阻连接到 Arduino 的数字引脚 5。同时,使用 USB 线将 Arduino 连接到计算机以实现串口通信。当串口监听输入1的时候灯亮、输入0灯灭;usb线不要拔下;
代码实现
const int ledPin = 5;
void setup() {
// 初始化串口通信,设置波特率为 9600
Serial.begin(9600);
// 将 LED 引脚设置为输出模式
pinMode(ledPin, OUTPUT);
}
void loop() {
// 检查串口是否有数据输入
if (Serial.available() > 0) {
// 读取串口输入的一个字符
char incomingChar = Serial.read();
if (incomingChar == '1') {
// 如果输入为 '1',点亮 LED 灯
digitalWrite(ledPin, HIGH);
Serial.println("LED is ON");
} else if (incomingChar == '0') {
// 如果输入为 '0',熄灭 LED 灯
digitalWrite(ledPin, LOW);
Serial.println("LED is OFF");
}
}
}
代码解释
- 变量定义:
const int ledPin = 13;
定义了 LED 灯连接的引脚为 13。 setup()
函数:初始化串口通信,设置波特率为 9600,并将 LED 引脚设置为输出模式。loop()
函数:检查串口是否有数据输入。如果输入为 ‘1’,则点亮 LED 灯并发送提示信息到串口监视器;如果输入为 ‘0’,则熄灭 LED 灯并发送提示信息。
总结
通过本章的学习,我们了解了 Arduino 串口通信的基本概念,掌握了串口输入和输出的实现方法,并且通过综合应用示例学会了根据串口输入控制外部设备。串口通信为我们拓展 Arduino 项目提供了强大的支持,我们可以利用它与各种外部设备进行数据交互,实现更复杂的功能。在后续的学习中,我们可以基于串口通信进一步探索更多有趣的项目。