截图:
链接:
https://wokwi.com/projects/414956096009081857
代码:
//cslg单片机串口案例
const int BUFFER_SIZE = 128; // 定义缓冲区大小
char buffer[BUFFER_SIZE]; // 创建缓冲区
int index = 0; // 缓冲区索引
void setup() {
Serial.begin(9600); // 初始化串口通信,波特率设置为9600
Serial.println("虽然听不懂,老师讲得也烂,但我们超级喜欢单片机这门课呢!!!");
}
void loop() {
// 检查串口是否有数据可读
if (Serial.available() > 0) {
// 读取一个字节
char incomingByte = Serial.read();
// 检查是否达到了缓冲区大小限制
if (index < BUFFER_SIZE - 1) {
// 将字节添加到缓冲区中
buffer[index++] = incomingByte;
// 检查是否收到了字符串结束符(换行符)
if (incomingByte == '\n') {
// 在缓冲区末尾添加字符串结束符(对于计算字符数不是必需的,但有助于打印)
buffer[index] = '\0';
// 计算字符串的字符数(不包括结尾的'\0')
int stringLength = index - 1; // 减1是因为我们不包括换行符'\n'
// 打印接收到的字符串及其字符数
Serial.print("收到啦,收到啦,不要再哔哔啦: ");
Serial.println(buffer);
Serial.print("您看看您哔哔了多少个字符: ");
Serial.println(stringLength);
// 清空缓冲区索引以准备接收下一个字符串
index = 0;
}
} else {
// 如果缓冲区满了,打印错误消息并清空缓冲区
Serial.println("爆了吧,哔哔的缓冲区都炸了,罪孽啊...");
index = 0;
}
}
}
Wokwi Arduino Mega 2560 - UART串行口通信实验报告
实验目的
本实验旨在通过Arduino Mega 2560微控制器实现UART串行口通信功能。用户通过串口监视器发送字符串,Arduino接收字符串并计算其字符数,然后将接收到的字符串及其字符数回显到串口监视器上。此实验演示了串口通信的基本原理、字符串处理以及缓冲区管理。
实验器材
- Arduino Mega 2560 微控制器
- USB连接线
- Wokwi在线仿真平台(用于代码测试和仿真)或Arduino IDE及串口监视器
实验原理
-
UART串行口通信:UART(Universal Asynchronous Receiver/Transmitter)是一种异步串行通信协议,用于在微控制器与外部设备(如计算机、传感器等)之间传输数据。
-
缓冲区管理:在串口通信中,由于数据传输速度可能不匹配,需要使用缓冲区来暂存接收到的数据。本实验中使用了一个字符数组作为缓冲区,并设置了缓冲区大小限制。
-
字符串处理:接收到的数据被存储在缓冲区中,当检测到换行符(
\n
)时,认为一个完整的字符串已经接收完毕,然后计算字符串的字符数并回显到串口监视器上。
实验步骤
- 硬件连接:
- 使用USB连接线将Arduino Mega 2560连接到计算机。
- 如果使用Wokwi在线仿真平台,则无需实际硬件连接。
- 软件编程:
- 初始化串口通信,设置波特率为9600。
- 在
setup()
函数中打印一条欢迎信息到串口监视器。 - 在
loop()
函数中不断检查串口是否有数据可读,如果有,则读取数据并存储到缓冲区中。 - 当检测到换行符时,认为一个完整的字符串已经接收完毕,计算字符串的字符数并回显到串口监视器上。
- 如果缓冲区满了,打印错误消息并清空缓冲区。
- 测试与验证:
- 打开串口监视器(或Wokwi的串口终端),设置波特率为9600。
- 向Arduino发送字符串,观察串口监视器上的回显信息,验证字符串接收和字符数计算是否正确。
实验代码
cpp复制代码
const int BUFFER_SIZE = 128; // 定义缓冲区大小 | |
char buffer[BUFFER_SIZE]; // 创建缓冲区 | |
int index = 0; // 缓冲区索引 | |
void setup() { | |
Serial.begin(9600); // 初始化串口通信,波特率设置为9600 | |
Serial.println("虽然听不懂,老师讲得也烂,但我们超级喜欢单片机这门课呢!!!"); | |
} | |
void loop() { | |
// 检查串口是否有数据可读 | |
if (Serial.available() > 0) { | |
// 读取一个字节 | |
char incomingByte = Serial.read(); | |
// 检查是否达到了缓冲区大小限制 | |
if (index < BUFFER_SIZE - 1) { | |
// 将字节添加到缓冲区中 | |
buffer[index++] = incomingByte; | |
// 检查是否收到了字符串结束符(换行符) | |
if (incomingByte == '\n') { | |
// 在缓冲区末尾添加字符串结束符(对于计算字符数不是必需的,但有助于打印) | |
buffer[index] = '\0'; | |
// 计算字符串的字符数(不包括结尾的'\0') | |
int stringLength = index - 1; // 减1是因为我们不包括换行符'\n' | |
// 打印接收到的字符串及其字符数 | |
Serial.print("收到啦,收到啦,不要再哔哔啦: "); | |
Serial.println(buffer); | |
Serial.print("您看看您哔哔了多少个字符: "); | |
Serial.println(stringLength); | |
// 清空缓冲区索引以准备接收下一个字符串 | |
index = 0; | |
} | |
} else { | |
// 如果缓冲区满了,打印错误消息并清空缓冲区 | |
Serial.println("爆了吧,哔哔的缓冲区都炸了,罪孽啊..."); | |
index = 0; | |
} | |
} | |
} |
实验结果
- 当用户通过串口监视器发送字符串时,Arduino会接收字符串并计算其字符数。
- Arduino将接收到的字符串及其字符数回显到串口监视器上。
- 如果发送的字符串过长导致缓冲区满了,Arduino会打印错误消息并清空缓冲区。
实验结论
本实验成功实现了通过Arduino Mega 2560微控制器进行UART串行口通信的功能。通过编程控制串口通信、字符串处理和缓冲区管理,验证了串口通信的基本原理和字符串处理的方法。同时,实验也展示了如何使用Arduino的串口通信功能进行简单的数据交互。
Wokwi Arduino Mega 2560 - UART 串行口通信教程
一、课程简介
本教程将详细介绍如何在 Wokwi 平台上使用 Arduino Mega 2560 进行 UART(通用异步收发传输器)串行口通信。通过本教程,你将掌握 UART 通信的基本原理、硬件连接方法、编程技巧,以及如何在 Wokwi 上进行仿真和调试。
二、UART 通信基础
1. UART 简介
UART 是一种全双工异步串行通信协议,广泛用于微控制器与外部设备之间的数据交换。它通过两根线(TX 和 RX)进行数据传输,TX 用于发送数据,RX 用于接收数据。
2. 数据帧格式
UART 通信的数据帧包括起始位、数据位、校验位(可选)、停止位等部分。常见的配置是 8 个数据位、无校验位、1 个停止位。
3. 波特率
波特率是 UART 通信中每秒传输的符号数,它决定了数据传输的速度。常见的波特率有 9600、115200 等。通信双方必须设置相同的波特率才能正确通信。
三、硬件连接
1. 准备材料
- Arduino Mega 2560 开发板
- USB 数据线
- 另一块支持 UART 通信的设备(如另一块 Arduino 板、电脑串口等)
- 面包板及跳线(如果需要连接其他设备)
2. 连接方法
- 将 Arduino Mega 2560 的 TX 引脚(数字引脚 1)连接到接收设备的 RX 引脚。
- 将 Arduino Mega 2560 的 RX 引脚(数字引脚 0)连接到接收设备的 TX 引脚。
- 确保所有设备的 GND 引脚相互连接,以形成共同的参考点。
四、编程基础
1. Arduino IDE
- 安装并打开 Arduino IDE。
- 选择正确的开发板(Arduino Mega 2560)和端口。
2. Serial 类
Arduino 提供了 Serial 类用于 UART 通信。以下是常用的 Serial 类函数:
Serial.begin(baudRate)
:初始化串口通信,设置波特率。Serial.print(val)
:向串口发送数据。Serial.println(val)
:向串口发送数据并换行。Serial.available()
:返回串口缓冲区中可读取的字节数。Serial.read()
:从串口缓冲区读取一个字节的数据。
3. 示例代码
发送端代码(Arduino Mega 2560):
void setup() {
Serial.begin(9600); // 初始化串口通信,设置波特率为 9600
}
void loop() {
Serial.println("Hello, UART!"); // 向串口发送数据
delay(1000); // 延时 1 秒
}
cpp复制代码
void setup() { | |
Serial.begin(9600); // 初始化串口通信,设置波特率为 9600 | |
} | |
void loop() { | |
Serial.println("Hello, UART!"); // 向串口发送数据 | |
delay(1000); // 延时 1 秒 | |
} |
接收端代码(另一块 Arduino 板或电脑串口监视器):
void setup() {
Serial.begin(9600); // 初始化串口通信,设置波特率为 9600
}
void loop() {
if (Serial.available() > 0) { // 检查串口缓冲区中是否有数据
String incomingData = Serial.readStringUntil('\n'); // 读取一行数据
Serial.print("Received: ");
Serial.println(incomingData); // 将接收到的数据打印到串口监视器
}
}
cpp复制代码
void setup() { | |
Serial.begin(9600); // 初始化串口通信,设置波特率为 9600 | |
} | |
void loop() { | |
if (Serial.available() > 0) { // 检查串口缓冲区中是否有数据 | |
String incomingData = Serial.readStringUntil('\n'); // 读取一行数据 | |
Serial.print("Received: "); | |
Serial.println(incomingData); // 将接收到的数据打印到串口监视器 | |
} | |
} |
五、仿真与调试
1. Wokwi 平台
- 将发送端代码上传到 Wokwi 平台上的 Arduino Mega 2560 仿真器。
- 将接收端代码上传到另一块 Arduino 板的仿真器(如果可用),或者使用 Wokwi 的串口监视器功能。
- 在 Wokwi 平台上观察串口通信的情况。
2. 调试技巧
- 使用串口监视器查看发送和接收的数据。
- 检查硬件连接是否正确。
- 确保波特率设置一致。
- 使用
Serial.print()
或Serial.println()
输出调试信息,帮助定位问题。
六、高级功能
1. 多串口通信
Arduino Mega 2560 提供了多个硬件串口(Serial1、Serial2、Serial3),可以用于与多个设备进行通信。使用方法与 Serial 类似,只需将对象名替换为相应的串口对象即可。
2. 软件串口
如果硬件串口不够用,可以使用 SoftwareSerial 库创建软件串口。但请注意,软件串口的性能可能不如硬件串口。
3. 数据解析与处理
在实际应用中,接收到的数据可能需要进行解析和处理。可以使用字符串处理函数或自定义协议来实现。
七、课程总结
通过本教程的学习,你掌握了 UART 串行口通信的基本原理、硬件连接方法、编程技巧以及仿真调试方法。希望你在后续的学习中能够继续探索更多高级功能,并将所学知识应用到实际项目中。
八、学习资源
- Arduino 官方文档:获取更多关于 Arduino Mega 2560 和 UART 通信的信息。
- Wokwi 平台教程:学习如何在 Wokwi 平台上进行仿真和调试。
- 在线社区和论坛:与其他开发者交流经验,解决遇到的问题。