串口使用及测量实验2

工程文件:https://github.com/A-Y-1/HNU

        和串口部分第一个实验一样用C写的,然后又和同学搞了一个C++的出来,但是还是比不过python的版本╮(╯▽╰)╭,仅供参考。(改改还是能更好的,但是我开摆了)

update4.23:我更新了串口1的代码,改到能读出全部密码了,还没完成串口1的可以看看

串口使用与测量2

一.实验目的

1.熟练使用Linux下io函数read、write和epoll等

2.熟练RS485串口的信号特点

3.熟练处理流式通信数据

4.理解485总线的冲突问题

二.实验过程

RS485信号测量

      本实验需要将A板与B板通过RS485接口连接并进行通信。需要使用杜邦线连接两单片机板的RS485接口,通过计算机向B板写入发送的数据(A板序列号+学号),数据将通过串口发给B板,再经RS485接口发给A板,发送后A板将发回密码,B板将密码通过串口发送到计算机,需要在计算机上读出密码。

1.测量A板波特率

      将A板RS485接口接到示波器,测量如下:

      波特率大约为1/50us,故可确认波特率为19200。将B板接示波器,控制摇杆调整至波特率为19200。

2.测量序列号

      将A板与B板的RS485接口通过杜邦线连接,按下A板K3,在串口调试助手可以收到A板的序列号为:0e224bed。

        此处由于时间有限,直接使用串口调试助手得到A板的序列号,可用示波器得到A板的序列号,使用示波器按波形读取序列号时,需要注意停止位。

3.读密码

      在linux平台下的前次实验的读取串口程序中,设置缓冲区,循环中向串口写入AA55+序列号+学号

运行程序,可以收到A板发送的密码:

密码为2fe40a4b。

4.提交

      将序列号及密码提交。

RS485总线数据收发

        RS485总线有两条线信号线,能够传输一个逻辑信号。计算机标准的UART串口有RX、TX收发两条线,因此能够同时进行数据的接收和发送。而RS485只有一个逻辑信号,因此同一时刻只能有一个主体进行数据发送(因此叫做半双工通信串口)。

        本实验需要连接两单片机板的RS485接口,A板将先发送序列号。使用计算机连接B板串口,发送学号,然后B板将发送给A板,此后A板将通过RS485接口发送密码,B板需要接收密码,取出密码发回,然后A板将发送新的密码。重复该过程至A板不再发送新的密码。

1.测量A板序列号

      先使用串口调试助手接收A板的序列号,序列号为79eb7a19

2.接收密码,分析密码格式

      先使用串口调试助手发送学号,接收一次A板的密码,从而判断A板发送密码的格式。得到的密码格式为aa 55 ff 5b 11 30 95,即aa 55后开始四个字节即为密码,中间只有一个字节的填充字符。

3.编写代码

      已知密码格式,接下来编写程序完成B板的学号发送,密码的处理及密码的发送工作。

      编写代码使用c语言在第一次实验中的代码基础上进行修改,一个字节一个字节读取数据,然后取出密码发送数据,由于这种方式需要多次读取A板发送的串,耗时很长。最终使用的代码是同学使用C++编写的程序,该程序可以一次读到足够长度的数据。以下先对该程序进行说明:

C++语言实现

      程序使用c++语言进行编写,程序的读写使用的myRead和myWrite是参考网上的实现,将串口相关读写功能封装为serial类使用。具体的读写函数通过循环,确保能够读到或写足够长度的数据。数据均使用vector保存。在主程序中,先发送学号,然后while循环读取数据,读到的数据长是确定的。读取长度根据已知密码格式应该为7个字节,由于密码串开始的位置是不确定的,对读到的数据要先找到aa 55,然后通过取余的方式将数据中的密码字节读取并插入vector,再进行发送。

        运行结果:

        最终得到的密码为a681a302,提交:

C语言实现

        主要部分如下:

        读取到aa55后开始计数,start设置为4,即count=4,第四个字节而开始向缓冲区buf写入密码字节,写够4字节后向串口写入数据。由于这种实现需要一个字节一个字节读取数据,耗时很长,最后没有使用该程序,但测试时运行三分钟左右,得到的密码提交为38号密码,表明程序可以正确运行。

三.实验总结

        通过实验进一步熟悉了串口通信的方法,以及使用write,read等函数进行串口数据进行读写。了解了RS485接口的使用,通过RS485实现了两板的通信和数据传输。认识了RS485的半双工通信模式,在程序运行时,有些产生的密码是错误的,即发生了冲突得到了错误数据。对于程序的编写,能够通过c语言程序实现功能,但是效果不好,还需要进一步学习。最终的实现还是参考他人的c++代码完成,后续还需要加深理解,提高代码的性能以及编写相关代码的能力。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Arduino平台上使用US-100超声波测距模块的串口模式进行测距实验,需要进行以下步骤: 1. 连接硬件:将US-100超声波测距模块的VCC、GND、Trig和Echo引脚分别连接到Arduino开发板的5V、GND、D10和D11引脚。 2. 编写代码:使用Arduino IDE编写如下代码: ``` int trigPin = 10; int echoPin = 11; void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin, HIGH); int distance = duration / 58; Serial.print("Distance: "); Serial.print(distance); Serial.println(" cm"); delay(500); } ``` 3. 上传代码:将编写好的代码上传到Arduino开发板中。 4. 启动串口监视器:在Arduino IDE中打开串口监视器,设置波特率为9600。 5. 测试测距:将US-100超声波测距模块对准要测距的物体,串口监视器中就会显示出距离值。 需要注意的是,US-100超声波测距模块的测距范围为2cm-450cm,超过450cm后会返回0值。此外,还需要根据实际情况选择合适的引脚进行连接。 ### 回答2: US-100超声波测距模块是一款常用于测距的传感器,可以通过串口与Arduino平台进行通信。在本实验中,我们将使用Arduino来控制US-100模块并获取测距数据。 首先,我们需要将US-100模块与Arduino连接。将VCC引脚连接到5V电源,GND引脚连接到地线,将Trig引脚连接到Arduino的任意数字引脚(我们选择数字引脚13),将Echo引脚连接到Arduino的数字引脚12,并将US-100模块的TXD引脚连接到Arduino的数字引脚11。此外,还需要将US-100模块的RXD引脚连接到Arduino的数字引脚10。 在Arduino代码中,我们首先需要通过软串口库将数字引脚10和11设置为串口通信引脚。然后,在setup函数中,我们需要使用Serial.begin函数来初始化串口通信的波特率。在loop函数中,我们可以使用Serial.write函数向US-100模块发送指令,例如获取距离数据的指令。 当我们向US-100模块发送指令后,它将通过串口将测距数据发送回Arduino。我们可以使用Serial.available函数检查是否有数据可用,然后使用Serial.read函数读取数据。读取到的数据是模拟信号,需要根据US-100模块的说明书进行转换,以得到实际的距离值。 最后,我们可以使用Serial.print函数将测距数据输出到串口监视器,或者将其用于其他需要测距的应用程序。 总而言之,通过使用Arduino平台和US-100超声波测距模块的串口模式,我们可以方便地进行测距实验,并获取准确的距离数据。这种测距方式可以广泛应用于机器人导航、智能停车系统等方面。 ### 回答3: Arduino平台使用US-100超声波测距模块的串口模式测距实验是一种基于Arduino开发板和US-100超声波测距模块的测距方法。首先,我们需要将US-100模块与Arduino开发板连接,US-100模块的VCC连接到Arduino的5V引脚,GND连接到GND引脚,Trig连接到Arduino的数字引脚,Echo连接到Arduino的数字引脚。 接下来,我们需要编写Arduino代码来实现测距功能。首先,我们需要包含串口通信库和US-100模块的Arduino库。然后,我们在setup函数中初始化串口和US-100模块。在loop函数中,我们使用US-100库提供的函数来获取测距数据,并通过串口发送到电脑上的串口监视器。 在测试实验中,我们可以将一个物体放置在US-100模块的测距范围内,并使用串口监视器来查看测得的距离数据。通过该实验,我们可以了解到US-100模块能够使用超声波测量距离,并将其通过Arduino开发板发送到电脑上进行显示。 总的来说,使用Arduino平台进行US-100超声波测距模块的串口模式测距实验是一种简单而有效的方法,可以帮助我们学习和理解超声波测距原理,并实现距离数据的获取和显示。该实验的结果可以用于各种项目,如机器人导航、避障等。在实践中,我们可以根据具体需求进行相应的调整和改进,以实现更多功能和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值