A测题目名称: 双机串口通信体系

打印 上一主题 下一主题

主题 993|帖子 993|积分 2979

题目名称:  双机串口通信体系  

一、题目要求

软件环境:推荐采用 Proteus 8.9 SP2 及以上仿真软件,Arduino IDE。
实现功能:利用 2 个 Arduino UNO 微控制器,搭建一个双机串口双向通信体系。
·功能:2个Arduino UNO(A机和B机)通过软件串行接口连接举行双向通信。 首先,在与A机连接的虚拟终端VT_A中输入弟子自己的学号,格式为ID:xxxxxxxxxxx,代码要求虚拟机A显示输入;A机通过串行接口向B机发送,B机收到后在虚拟终端VT_B上只能显示弟子的学号,格式为:xxxxxxxxxxx,代码要求虚拟机B只显示格式中的xxxxxxxxxxx部分;
接着,在与B机连接的虚拟终端 VT_B中输入回应,格式为:Re:OK,代码要求虚拟机B显示输入;B机通过串行接口向A机发送,A机收到后在虚拟终端VT_A上只能显示OK。

二、筹划思路

两个Arduino UNO开辟板通过软串口建立通信时,通常采用IO4与IO5引脚互联的方式。具体设置为:将此中一块板的IO4设定为接收端(RX),另一块板的IO5则作为发送端(TX),两者通过交织接线实现信号传输(即甲板的TX端连接乙板的RX端)。这种硬件对接方式可构建双向数据通道,使两个微控制器能够相互收发信息,其连接表现图如下所示:


三、仿真结果展示

1.虚拟终端 VT_A 输入学号(输入自己学号)截图(包括此时的虚拟终端 VT_B)

2.B 机收到后虚拟终端 VT_B 显示学号截图(包括此时的虚拟终端 VT_A)


3.虚拟终端 VT_B 输入回应截图(包括此时的虚拟终端 VT_A)

4.A 机收到后虚拟终端 VT_A 显示回应截图(包括此时的虚拟终端 VT_B)

四、程序筹划(用Arduino编写)

A机源代码:

  1. #include <SoftwareSerial.h>
  2. // 定义软串口的引脚
  3. SoftwareSerial mySerial(4, 5); // RX, TX
  4. void setup() {
  5.     Serial.begin(9600); // 初始化默认串口
  6.     mySerial.begin(9600); // 初始化软串口
  7. }
  8. void loop() {
  9.     // 从虚拟终端 VT_A 接收输入
  10.     if (Serial.available()) {
  11.         String input = Serial.readStringUntil('\n'); // 读取输入直到换行
  12.         Serial.println(input); // 显示输入
  13.         
  14.         // 检查格式并发送到 B 机
  15.         if (input.startsWith("ID:")) {
  16.             String studentID = input.substring(3); // 提取学号部分
  17.             mySerial.println(studentID); // 发送学号到 B 机
  18.         }
  19.     }
  20.     // 从 B 机接收回应
  21.     if (mySerial.available()) {
  22.         String response = mySerial.readStringUntil('\n'); // 读取回应直到换行
  23.         if (response.startsWith("Re:")) {
  24.             String reply = response.substring(3); // 提取回应内容
  25.             Serial.println(reply); // 显示回应内容
  26.         }
  27.     }
  28. }
复制代码
B机源代码:

  1. #include <SoftwareSerial.h>
  2. // 定义软串口的引脚
  3. SoftwareSerial mySerial(4, 5); // RX, TX
  4. void setup() {
  5.     Serial.begin(9600); // 初始化默认串口
  6.     mySerial.begin(9600); // 初始化软串口
  7. }
  8. void loop() {
  9.     // 从 A 机接收学号
  10.     if (mySerial.available()) {
  11.         String studentID = mySerial.readStringUntil('\n'); // 读取学号直到换行
  12.         Serial.println(studentID); // 显示完整学号
  13.     }
  14.     // 从虚拟终端 VT_B 接收回应
  15.     if (Serial.available()) {
  16.         String input = Serial.readStringUntil('\n'); // 读取输入直到换行
  17.         Serial.println(input); // 显示输入
  18.         
  19.         // 检查格式并发送回 A 机
  20.         if (input.startsWith("Re:")) {
  21.             mySerial.println(input); // 发送回应到 A 机
  22.         }
  23.     }
  24.     // 接收来自 A 机的回应
  25.     if (mySerial.available()) {
  26.         String response = mySerial.readStringUntil('\n'); // 读取回应直到换行
  27.         Serial.println(response); // 显示 OK
  28.     }
  29. }
复制代码
备注:代码有一丢丢小题目,就是图1和图2结果会同时出现,图3和图4同理。但由于时间紧(实在是懒。。。)没有再改代码,大家可以自己添加修改。又或者实在用Backspace键就能轻松得到题中要求的4张图的效果。(

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南飓风

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表