用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

点击进入授权页面

只需一步,快速开始

  • QQ空间
  • 回复
  • 收藏
  • TA的每日心情
    开心
    2018-6-13 15:43
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    shenyunxiao 来自手机 注册会员 2018-6-12 18:57 楼主
    本帖最后由 shenyunxiao 于 2018-6-13 15:40 编辑

    Arduino 怎么读取16进制  是这样的发送16进制 00 06 0F A0 00 01 4A ED,如果回复00 06 0F A0 00 01 4A ED就说明正常,我要在arduino里面判断如返回00 06 0F A0 00 01 4A ED就结束,不是的话在发送00 06 0F A0 00 01 4A ED,现在发送没有问题,就是接收没有弄好,请高手指导,,
    void setup() {
      Serial.begin(9600);
      Serial.flush();
    }
    void loop() {
      unsigned char Temp25[8] = {0x00,0x06,0x0F,0xA2,0x00,0x19,0xEB,0x27};
    Serial.write(Temp25,8);
    delay(10000);
    unsigned char off[8] = {0x00,0x06,0x0F,0xA0,0x00,0x00,0x8B,0x2D} ;
      Serial.write (off,8);
      delay(10000);


    }

    本帖最后由 孤胆枪手 于 2018-6-12 20:01 编辑

    你发送的十六进制或者十进制其实收到就是二进制
    你可以直接把收到的数据当十六进制处理,也可以直接当十进制处理
    打赏作者鼓励一下!
    你是要做什么
    校验码?
    还是发送数据包最后要校验和
    参考一下这个吧:
    https://www.arduino.cn/thread-5110-1-1.html
    打赏作者鼓励一下!

    1人打赏

    把每个16进制的值,看成一个字符就行了,就和普通读字符串一样的,没有区别
    如果你觉得以上内容帮到了你,你可以打赏支持作者

    1人打赏

    coloz 发表于 2018-6-13 18:45
    把每个16进制的值,看成一个字符就行了,就和普通读字符串一样的,没有区别 ...

    可以帮忙写一下啊?
    coloz 发表于 2018-6-13 18:45
    把每个16进制的值,看成一个字符就行了,就和普通读字符串一样的,没有区别 ...

    String comdata = "";

    void setup()
    {
        Serial.begin(9600);
    }

    void loop()
    {
        while (Serial.available() > 0)  
        {
            comdata += char(Serial.read());
            delay(2);
        }
        if (comdata.length() > 0)
        {
            Serial.println(comdata);
            comdata = "";
        }
    }用这个,但是读取不到返回的这个00 06 0F A0 00 01 4A ED,
    16进制数据,你作为字符串输出,如果不是ascii,就看不到的
    如果你觉得以上内容帮到了你,你可以打赏支持作者
    可以参考我贴,算了直接写个吧
    [C++] 纯文本查看 复制代码
    #define MAX_PACKETSIZE 128 //自定义的缓冲buff长度
    
    char uart_Receive_Buff [ MAX_PACKETSIZE ]; //定义缓冲buff
    
    unsigned int uart_Receive_Index = 0; //收到的字节实际长度
    
    unsigned long preUartTime = 0; //记录读取最好一个字节的时间点
    
    /*
      处理串口数据函数,可以在函数内编写处理函数数据的程序
    */
    void parseUartPackage(char *p , int len) {
    
      if (len != 8) {
        //不是目标长度
        char buf[8] = {0x00, 0x06, 0x0F, 0xA0, 0x00, 0x01, 0x4A, 0xED};
        send2UART(buf, 8);
      }
      else {
        char buf[8] = {0x00, 0x06, 0x0F, 0xA0, 0x00, 0x01, 0x4A, 0xED};
        for (int i = 0; i < 8; i++) {
    
          if (p[i] != buf[i]) {
            //不等
            char buf2[8] = {0x00, 0x06, 0x0F, 0xA0, 0x00, 0x01, 0x4A, 0xED};
            send2UART(buf2, 8);
            break;
          }
        }
        //相等
    
      }
    
    
    }
    
    void send2UART(const char *p, size_t len) {
      Serial.write(p, len);
    }
    /*
            串口数据接受进程
     */
    void doUartTick()
    {
      if (Serial.available())
      { //读取串口数据
        //每次读取一个字节的数据存储在这个buff中
        uart_Receive_Buff [ uart_Receive_Index ++ ] = Serial.read();
        //记录下读取这个数据的时间点
        preUartTime = millis();
    
        //判断读取到的数据长度是否超过设定的记录长度,超过长度时间点往前200ms 立即执行分析函数
        if (uart_Receive_Index >= MAX_PACKETSIZE - 1) {
          uart_Receive_Index = MAX_PACKETSIZE - 2;
          preUartTime = preUartTime - 200;
        }
      }
      //判断收到的最后一个字节后超过100ms开始执行分析函数
      if (uart_Receive_Index > 0 && (millis() - preUartTime >= 100))
      { //处理串口数据
        //把buff最后一个字节设为0,在字符串处理中很有用
        uart_Receive_Buff [ uart_Receive_Index ] = 0x00;
        Serial.flush();
    
        //执行串口数据处理函数
        parseUartPackage(uart_Receive_Buff, uart_Receive_Index);
        uart_Receive_Index = 0;
      }
    }
    
    void setup() {
      Serial.begin(9600);
      char buf[8] = {0x00, 0x06, 0x0F, 0xA0, 0x00, 0x01, 0x4A, 0xED};
      send2UART(buf, 8);
    }
    
    void loop()
    {
      //调用串口数据处理进程
      doUartTick();
    }
    看作者这么辛苦的份上,打赏鼓励一下!

    1人打赏

    再串口监视器里输入0x00, 0x06, 0x0F, 0xA0, 0x00, 0x01, 0x4A, 0xED输出字母J,为什么?
    跑龙套的保 发表于 2018-6-13 23:52
    可以参考我贴,算了直接写个吧
    [mw_shl_code=cpp,true]#define MAX_PACKETSIZE 128 //自定义的缓冲buff长度 ...

    再串口监视器里输入0x00, 0x06, 0x0F, 0xA0, 0x00, 0x01, 0x4A, 0xED输出字母J,为什么?
    发新帖
    发表评论
    高级模式  
    您需要登录后才可以回帖 登录 | 立即注册  
    关闭

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