用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

点击进入授权页面

只需一步,快速开始

  • QQ空间
  • 回复
  • 收藏
  • TA的每日心情
    慵懒
    2018-6-14 08:52
  • 签到天数: 281 天

    [LV.8]以坛为家I

    本帖最后由 O_oYYQ 于 2017-3-1 17:38 编辑

    你有碰到过使用非自带的串口助手无论怎么修改程序都没办法读到101的串口数据嘛?下载更换其他的串口助手依然无用嘛?
    你有碰到过使用101读取串口数据只要用到read();ReadLine();只要读取Unity就会死嘛?

    那么你来对地方了!
    --------------------------------------------------------------------------------------------------------分割线
    最近在望远镜项目中用到了Genuino 101自带的陀螺仪,参考了官方的示例程序得到姿态
    角度,并通过Unity读取Genuino 101串口传来的角度数据,然后在3D场景中运用起来。
    发现在IDE自带的串口监视器上能得到需要的数据,但是用我之前常用的Unity用到的串口语句
    根本没有数据获取。百般无奈自己搜索了国内各大Arduino论坛都没有类似的问题,猜想可能是
    101的用户还没那么多的缘故吧。
    终于在官方的论坛中找到了和我碰到相同问题的人
    1.png
    以及相应的解决办法
    2.png
    https://forum.arduino.cc/index.php?topic=110942.0 这个是国外原来的帖子。
    与此同时在QQ群中咨询奈何大大,终于还是在我们自己论坛得到了问题的解决方案。
    只需要在自己写的串口程序中开启DTR即可.
    链接如下:
    http://www.arduino.cn/thread-19775-2-1.html
    不得不感叹一下我们社区真的是一个无所不能的存在,哈哈哈~
    --------------------------------------------------------------------------------------------------------分割线
    可能有人第一次使用Unity读取Arduino/Genuino的串口数据,看了上面的解决方法还不是很懂,
    所以我把Unity设置串口初始化的代码贴出来,给各位同样遇到这样类似问题的盆友,一个参考。
    /** * 日期: 2017/03/01 * 作者: O_oYYQ * 描述: Unity设置串口初始化 */ //串口初始化 private void InitPort()     {         Read(path);         usbDonglePort = new SerialPort();         usbDonglePort.PortName = comeName;         usbDonglePort.BaudRate = baudRate;         usbDonglePort.DataBits = dataBits;         usbDonglePort.StopBits = Bit;         usbDonglePort.Parity = parity;         usbDonglePort.DtrEnable = true;         usbDonglePort.Open();         print(usbDonglePort.IsOpen);     } private void Read(string path)     {         StreamReader sr = new StreamReader(path, Encoding.Default);         string line;         for (int i = 0; i < 11; i++)         {             line = sr.ReadLine();             print(line);             string[] s = line.Split(':');             switch (i)             {                 case 0:                     comeName = s[1];                     print(s[1]);                     break;                 case 1:                     baudRate = float.Parse(s[1]);                     print(s[1]);                     break;                 case 2:                     Y_Min = float .Parse(s[1]);                     print(s[1]);                     break;                 case 3:                     Y_Max = float.Parse(s[1]);                     print(s[1]);                     break;                 case 4:                     X_Min = float.Parse(s[1]);                     print(s[1]);                     break;                 case 5:                     X_Max = float.Parse(s[1]);                     print(s[1]);                     break;                 case 6:                     COM_Y_Min = float.Parse(s[1]);                     print(s[1]);                     break;                 case 7:                     COM_Y_Max = float.Parse(s[1]);                     print(s[1]);                     break;                 case 8:                     COM_X_Min = float.Parse(s[1]);                     print(s[1]);                     break;                 case 9:                     COM_X_Max = float.Parse(s[1]);                     print(s[1]);                     break;                 case 10:                     camera_index = float.Parse(s[1]);                     print(s[1]);                     break;             }         }         isEnd = true;     }

    很抱歉的是,由于代码保密关系,没办法把望远镜的全部源程序贴出来,实在是有兴趣的同学可以加我
    我可以在能力范围内回答一些问题。
    回归主题,其实最重要的一句代码就是usbDonglePort.DtrEnable = true; 4.png
    只要在你之前的串口初始化中加入这句代码就能很神奇的解决Unity 3D无法读取Genuino 101串口的问题并且猜想可能不单单可以应用在Genuino 101上,可以应用在通信使用DFU协议的MCU上。(不过本人没有测试)不好意思,以前一直发的是求助帖,第一次发这样的“伪技术贴”,还不是很习惯,啰嗦了这么多,
    其实就这么一句代码。是不是很失望  - -
    最后感谢奈何大大的鼎力帮助。
    --------------------------------------------------------------------------------------------------------分割线
    http://www.arduino.cn/thread-19480-1-1.html 这是奈何大大写的101自带的加速度传感器、陀螺仪传感器
    的教程,我就是参考的那个。帖子中的例程可能在偏航角的获取上还不是很稳定,需要自己处理一下。
    另外我发现有一个很好用的串口助手推荐给大家下载,实测下来是支持Genuino 101串口数据读取的,
    还支持TCP/UDP测试。 3.png





    USR-TCP232-Test.zip

    467.24 KB, 下载次数: 12

    如果以上内容对你有帮助,你可以通过打赏支持作者
    点赞,楼主棒棒哒
    打赏作者鼓励一下!
    亚伦安娜 发表于 2017-3-1 17:41
    点赞,楼主棒棒哒

    谢谢支持~~一起学习  一起进步
    如果以上内容对你有帮助,你可以通过打赏支持作者
    不过不理解为什么这样能解决问题,在串口通讯之前先发一次 dtr?
    打赏作者鼓励一下!
    本帖最后由 O_oYYQ 于 2017-3-2 10:55 编辑
    Zoologist 发表于 2017-3-1 22:23
    不过不理解为什么这样能解决问题,在串口通讯之前先发一次 dtr?

    DTR:数据终端就绪;当此引脚高电平时,通知Modem可以进行数据传输,计算机已经准备好。101的可能接了DTR信号线,所以在串口初始化设置的时候,要软件设置它电平为高,就可以通讯了。具体为什么这样可以,由于能力有限,我也不知道怎么解释清楚,猜想可能是通信协议中,如果检测不到数据就绪,就一直在等待,所以接收不到数据吧,而有的不用设置的是因为它是不接DTR线的,所以不需要,看网上有人是这么解释的。
    http://www.360doc.com/content/14/0403/09/1519571_366009982.shtml我看这里有人也使用了相同的方法来进行通讯。
    因为这个问题最近搜索了很多相关,看到有人进行透传时,串口通讯不正常,要选中串口软件里的DTR信号才可以,而有的软件不带DTR,我附件里的那个助手就可以使用。http://bbs.eeworld.com.cn/thread-452922-1-1.html
    不好意思,由于我自己也不是很懂,解释不太清。
    如果以上内容对你有帮助,你可以通过打赏支持作者
    O_oYYQ 发表于 2017-3-2 10:47
    DTR:数据终端就绪;当此引脚高电平时,通知Modem可以进行数据传输,计算机已经准备好。101的可能接了DTR ...

    学习了 谢谢哈
    打赏作者鼓励一下!

    是互相学习~~
    如果以上内容对你有帮助,你可以通过打赏支持作者

    楼主,请问DTR在MCU与MCU通信 之间怎么提现?串口助手只是调试,如果实际应用要与上位机或者MCU互相通信 要怎么做?
    发新帖
    发表评论
    高级模式  
    您需要登录后才可以回帖 登录 | 立即注册  
    关闭

    推荐主题 上一条 /2 下一条