用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

点击进入授权页面

只需一步,快速开始

  • QQ空间
  • 回复
  • 收藏
  • TA的每日心情
    开心
    2017-5-10 16:06
  • 签到天数: 2 天

    [LV.1]初来乍到

    Spico 注册会员 2017-4-23 12:57 楼主
    本帖最后由 Spico 于 2017-4-24 22:13 编辑

    近日在使用OneNet平台时遇到了关于Arduino串口16进制读取的问题。具体问题描述如下:
    1. 根据平台特性,连接成功后会返回一组十六进制数:0X20 0X02 0X00 0X00, 失败后会返回: 0X40 0X01 0X3C;
    2. 在串口输入时,调试ESP8266进入透传模式后可以直接使用如下代码方式进行链接(IDE版本:1.6.12):
    [C] 纯文本查看 复制代码
    unsigned char connectData[50] = {
     0X10,0X30,0X00,0X03,0X45,0X44,0X50, 0X01,0X40,0X01,0X5C,0X00,0X07,0X34,
     0X39,0X33,0X33,0X37,0X38,0X37,0X00,
     0X1C,0X43,0X53,0X48,0X68,0X59,0X39,
     0X4F,0X35,0X6F,0X79,0X51,0X55,0X6E,
     0X41,0X33,0X5B,0X78,0X4B,0X3F,0X48,
     0X45,0X5B,0X59,0X44,0X73,0X50,0X30,
     0X3F
      };
      Serial.write(connectData, 50);
    3. 根据实际需要,我需要判断返回的数据,即如(1)中所说,要判断连接情况,以便执行正确操作。在使用串口工具,不使用Arduino时,对于这方面的操作可以选择“HEX显示”以查看结果,显示结果如下(如果不勾选的话就什么也不会显示):

    串口工具

    串口工具


    那么问题来了,在Arduino的程序之中怎么判断16进制返回值?

    尝试1:先Serial.read(),再判断最后一个数据,但是这个读取的是一个char字符,但是结果运行不正确。

    [C] 纯文本查看 复制代码
    Serial.flush(); //等待,将之前的串口操作指令发送完毕[/align]
    while(Serial.available()) {
      char temp = Serial.read();
    }
    bool connection = false;
    if (temp == 0X00) {
      connection = true;
    } else {
      connection = false;
    [align=left]}

    后来又尝试了Serial.find(),但是结果也不尽人意:

    [C] 纯文本查看 复制代码
      if (Serial.find(0X00)) {
        connection = 1;
    }

    提问:如何正确地读取16进制数据并进行判断?

    先在此谢过各路大侠。


    字太多,没全看,但我觉得你可能是没意识到串口监视器发送来的是字符串

    首先,进制只是数值的表现形式
    0x00=0
    0xFF=255
    如果传来的是0,那temp == 0X00就是成立的

    你确定你传入的是0?你可能是把字符串“0x00”和数值 0 搞混了
    如果以上内容对你有帮助,你可以通过打赏支持作者

    1人打赏

    Spico 来自手机 注册会员 2017-4-24 22:11
    板凳
    奈何col 发表于 2017-4-23 15:42
    字太多,没全看,但我觉得你可能是没意识到串口监视器发送来的是字符串

    首先,进制只是数值的表现形式

    谢谢您的指导,我确实是在基础问题的理解上面出现了偏差。
    怎么解决的啊。可以交流一下,同样问题!!!
    发新帖
    发表评论
    高级模式  
    您需要登录后才可以回帖 登录 | 立即注册  
    关闭

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