查看: 285|回复: 4

[未解决] 请大佬们帮忙看看是listen的问题吗?

[复制链接]

该用户从未签到

发表于 2021-5-15 20:21 | 显示全部楼层 |阅读模式
最近在做一个用了三个软串口的设计,一边是Arduino UNO与电脑上自己做的上位机通信,一边是Arduino与Openmv通信,一边是Arduino与舵机控制板通信。舵机控制板自带了Arduino版本的控制库,虽然用了软串口但是只是接收Arduino的数据,不主动发送数据给Arduino,就不用怎么监听,这边的通信也一直挺顺利的,与另外两个没啥冲突。但是另外两个都是要有数据交换的,就要来回切换监听对象,两个软串口单独工作时通信状况都良好,但是程序合在一起后Arduino接收数据时总是会有数据缺一块就导致乱码了,这个是由切换监听对象的过程引起的吗?listen函数使用后要等多久才能正常接收数据呢?
然后与Openmv通信的那个软串口我为了避免与其他程序冲突,已经限制它的通信了,现在是Arduino发送通信请求信号之后它才会给Arduino发送数据的,但是即使是这样还是会出现数据缺失乱码的情况。
  1. //下面是Arduino主动与Openmv通信的代码,OpenMV上的通信程序单独测试时是没问题的,只是Arduino这边接收的时候不对劲
复制代码

该用户从未签到

 楼主| 发表于 2021-5-15 20:25 | 显示全部楼层
本帖最后由 liangrubincn 于 2021-5-15 20:35 编辑
  1.   port_mv.listen();
  2.   delay(10);
  3.   digitalWrite(mv_flag,HIGH);//Arduino在切换监听对象一段时间后向OpenMV发出了通信请求
  4.   delay(5);
  5.   //while(!port_mv.peek());
  6.   while(port_mv.available()>0)
  7.     {
  8.       port_mv_in_str+=(char)(port_mv.read());
  9.       delay(2);
  10.       port_mv_rx=1;
  11.   }  
  12.     digitalWrite(mv_flag,LOW);//Arduino在接收完成后关闭通信
  13.     port1.listen();//port1是与上位机连接的软串口,接收完openmv数据后就切换为监听它,它会受到上位机的指令
  14.     delay(10);
  15.     if(port_mv_rx)
  16.     {
  17.     if(port_mv_in_str!="OK!")//openmv发来的信息有两种,一种是"OK!",代表暂无有效数据,Arduino收到这个会将这一消息过滤掉不转发给上位机。
  18.     {                                           //另一种数据是一串用空格隔开的数字,一共6个数,比如:"11 72 59 63 45 20"
复制代码

该用户从未签到

 楼主| 发表于 2021-5-15 20:37 | 显示全部楼层
  1.    port1.println("openmv said:"+port_mv_in_str);
  2.     }
  3.     Serial.println("openmv said:"+port_mv_in_str);  
  4. //port1.println("dis:"+dis_str+"m");
  5.     port_mv_rx=0;
  6.     port_mv_in_str="";
  7.   // Serial.println("OK(6)");  
  8.   }   
复制代码

该用户从未签到

 楼主| 发表于 2021-5-15 20:38 | 显示全部楼层
啊这,不太会操作结果代码每次输完就只剩一节,发了三次才发全大佬们看的时候辛苦了

该用户从未签到

 楼主| 发表于 2021-5-15 21:27 | 显示全部楼层
哦哦对,原来的注释里描述了乱码情况的,没发出来
从openmv接收的数据中,有两种形式上面的注释里有写~
其中"OK!"有时会变成"j*"或者"K!"或者"-?"之类的东西,不过刚才我在转换监听对象前把上一个软串口的缓冲区清空了一下,好像OK!这里就不怎么出问题,但是数字串依然会出现乱码。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

Arduino16进制字符串转ASCII(下)
Arduino16进制字符串转ASC
在Arduino16进制字符串转ASCII(上)(简称:上文)基础上,举一反三,超越自我,提高
OLED 128*64自制可达10000000个选项的菜单(已更新)
OLED 128*64自制可达10000
OLED 128*64自制可达10000000个选项的菜单 温馨提示: 建议占个楼再食用本帖子
ps2遥控小车——uno实现
ps2遥控小车——uno实现
前几天在阁楼发现了好久以前3d打印,激光切割的底盘,于是决定做这个东西 正好手上又
.h .cpp源代码转.ino草图
.h .cpp源代码转.ino草图
在Github上下载了源码,是.h 和.cpp文件,请问一下,如何才可以转成可以在arduinoIDE
Atmega8/16等AVR单片机改装成Arduino板子
Atmega8/16等AVR单片机改
Atmega8/16改装Arduino板子想把AVR单片机改装成arduino板的,可以通过一下开源库来支
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表