wokwi arduino mega 2560 - UART串行口通信

截图:

链接:

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及串口监视器
实验原理
  1. UART串行口通信:UART(Universal Asynchronous Receiver/Transmitter)是一种异步串行通信协议,用于在微控制器与外部设备(如计算机、传感器等)之间传输数据。

  2. 缓冲区管理:在串口通信中,由于数据传输速度可能不匹配,需要使用缓冲区来暂存接收到的数据。本实验中使用了一个字符数组作为缓冲区,并设置了缓冲区大小限制。

  3. 字符串处理:接收到的数据被存储在缓冲区中,当检测到换行符(\n)时,认为一个完整的字符串已经接收完毕,然后计算字符串的字符数并回显到串口监视器上。

实验步骤
  1. 硬件连接
    • 使用USB连接线将Arduino Mega 2560连接到计算机。
    • 如果使用Wokwi在线仿真平台,则无需实际硬件连接。
  2. 软件编程
    • 初始化串口通信,设置波特率为9600。
    • setup()函数中打印一条欢迎信息到串口监视器。
    • loop()函数中不断检查串口是否有数据可读,如果有,则读取数据并存储到缓冲区中。
    • 当检测到换行符时,认为一个完整的字符串已经接收完毕,计算字符串的字符数并回显到串口监视器上。
    • 如果缓冲区满了,打印错误消息并清空缓冲区。
  3. 测试与验证
    • 打开串口监视器(或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 平台上进行仿真和调试。
  • 在线社区和论坛:与其他开发者交流经验,解决遇到的问题。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangrelay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值