查看: 1157|回复: 9

[其他] 串口读取16进制

[复制链接]
  • TA的每日心情
    开心
    2018-9-20 20:22
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 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);


    }

  • TA的每日心情
    奋斗
    2018-11-24 00:09
  • 签到天数: 80 天

    [LV.6]常住居民II

    发表于 2018-6-12 20:00 | 显示全部楼层
    本帖最后由 孤胆枪手 于 2018-6-12 20:01 编辑

    你发送的十六进制或者十进制其实收到就是二进制
    你可以直接把收到的数据当十六进制处理,也可以直接当十进制处理
    打赏作者鼓励一下!
  • TA的每日心情
    奋斗
    2018-11-19 22:32
  • 签到天数: 205 天

    [LV.7]常住居民III

    发表于 2018-6-13 10:32 | 显示全部楼层
    你是要做什么
    校验码?
    还是发送数据包最后要校验和
    参考一下这个吧:
    https://www.arduino.cn/thread-5110-1-1.html
    打赏作者鼓励一下!

    1人打赏

  • TA的每日心情
    擦汗
    2018-9-19 20:22
  • 签到天数: 47 天

    [LV.5]常住居民I

    发表于 2018-6-13 18:45 | 显示全部楼层
    把每个16进制的值,看成一个字符就行了,就和普通读字符串一样的,没有区别
    如果你觉得以上内容帮到了你,你可以打赏支持作者

    1人打赏

  • TA的每日心情
    开心
    2018-9-20 20:22
  • 签到天数: 5 天

    [LV.2]偶尔看看I

     楼主| 发表于 2018-6-13 21:02 | 显示全部楼层
    coloz 发表于 2018-6-13 18:45
    把每个16进制的值,看成一个字符就行了,就和普通读字符串一样的,没有区别 ...

    可以帮忙写一下啊?
  • TA的每日心情
    开心
    2018-9-20 20:22
  • 签到天数: 5 天

    [LV.2]偶尔看看I

     楼主| 发表于 2018-6-13 21:05 | 显示全部楼层
    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,
  • TA的每日心情
    擦汗
    2018-9-19 20:22
  • 签到天数: 47 天

    [LV.5]常住居民I

    发表于 2018-6-13 23:32 | 显示全部楼层
    16进制数据,你作为字符串输出,如果不是ascii,就看不到的
    如果你觉得以上内容帮到了你,你可以打赏支持作者
  • TA的每日心情
    慵懒
    2018-11-12 08:58
  • 签到天数: 37 天

    [LV.5]常住居民I

    发表于 2018-6-13 23:52 | 显示全部楼层
    可以参考我贴,算了直接写个吧

    kittenblock中小学创客名师推荐的图形化编程软件

    #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 != buf) {
            //不等
            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人打赏

  • TA的每日心情
    开心
    2018-9-20 20:22
  • 签到天数: 5 天

    [LV.2]偶尔看看I

     楼主| 发表于 2018-6-19 17:56 | 显示全部楼层
    再串口监视器里输入0x00, 0x06, 0x0F, 0xA0, 0x00, 0x01, 0x4A, 0xED输出字母J,为什么?
  • TA的每日心情
    开心
    2018-9-20 20:22
  • 签到天数: 5 天

    [LV.2]偶尔看看I

     楼主| 发表于 2018-6-19 20:17 | 显示全部楼层
    跑龙套的保 发表于 2018-6-13 23:52
    可以参考我贴,算了直接写个吧
    [mw_shl_code=cpp,true]#define MAX_PACKETSIZE 128 //自定义的缓冲buff长度 ...

    再串口监视器里输入0x00, 0x06, 0x0F, 0xA0, 0x00, 0x01, 0x4A, 0xED输出字母J,为什么?
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    KittenBot杯第六届开源硬件开发大赛启动啦
    KittenBot杯第六届开源硬
    大赛简介: 第六届开源硬件开发大赛由Arduino中文社区发起 由KittenBot冠名赞助
    台灣兼職外約性感嬌嗲正妹line:802923
    台灣兼職外約性感嬌嗲正妹
    www.highbaby7788.com論壇看照約妹 LINE ID:pdlaa520 或者是802923 微信:ladyduola
    请问这个电机的编码电源和信号反馈是干嘛的
    请问这个电机的编码电源和
    25GA370直流减速电机带编码器,新手,求指导
    Arduino MEGA中文数据手册
    Arduino MEGA中文数据手册
    2018.9.23重新翻译整理 转载请注明来自Arduino中文社区,并附本帖链接 本帖地址:http
    原创 drawbot平面关节机械臂 教程直播贴
    原创 drawbot平面关节机械
    这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表