请大佬们帮忙看看是listen的问题吗?-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2663|回复: 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!这里就不怎么出问题,但是数字串依然会出现乱码。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 05:40 , Processed in 0.073475 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表