查看: 1191|回复: 19

[未解决] 关于UART串口通信的问题

[复制链接]
  • TA的每日心情
    开心
    2019-11-9 01:05
  • 签到天数: 63 天

    [LV.6]常住居民II

    发表于 2019-6-27 15:57 | 显示全部楼层 |阅读模式
    本帖最后由 jpolo 于 2019-6-27 16:00 编辑

    最近整了一个mp3播放模块,如图:
    bbd78262c828d179686d23d574407f5.jpg (焊在洞洞板上的那个)

    在UART模式下需要发送控制代码到模块,但是由于没有基础知识,怎么都搞不明白该怎么发送,求大神指点啊...
    下面是部分模块资料:
    74ccdbac7b480648cd63156c2f1d56d.png
    (线已经接好)
    4db429bfb86dbc55fffe6f3247e1b11.png
    (通信格式)
    微信截图_20190627155355.jpg
    (协议约定)
    4e94c2787f71b5c6f1af90bed1c16bc.png
    (通信指令)
    c9919f9ec3304a26d619147ae05c5d2.png
    (控制指令)


    void setup() {
        Serial.begin(9600,SERIAL_8N1);
        
        Serial.write("AA 02 00 AC",HEX);   
    }
    
    void loop() {
    
    }


    我这样写是不是很丢脸...:L
    求大神带一带啊...
    微信截图_20190627155505.jpg

    该用户从未签到

    发表于 2019-7-1 11:34 | 显示全部楼层
    发送十六进制数据要用serial.write();
    十六进制数据要在数据前加上0x前缀;
    byte comd_A[4]={0xAA, 0x02, 0x00 ,0xAC};
    byte comd_B[4]={0xAA, 0x03, 0x00 ,0xAD};

    void setup() {
      // put your setup code here, to run once:
      Serial.begin(9600);
    }

    void loop() {
      // put your main code here, to run repeatedly:

      //发送数组数据的方法1:
       for(int i=0; i<4; i++)
       {
          Serial.write(comd_A);
        }
        delay(500);

       //发送数组数据的方法2:
        Serial.write(comd_B, 4);
         delay(500);
    }

    serial_write_test_jul01a.zip

    668 Bytes, 下载次数: 4

  • TA的每日心情
    开心
    2020-1-26 00:13
  • 签到天数: 1022 天

    [LV.10]以坛为家III

    发表于 2019-6-28 08:35 | 显示全部楼层
    Serial系列指令貌似都没用对哈,还是看看手册吧
    再有,确定一下该模块通讯协议中到底是字符还是16进制数据,可以先用串口监视器试着发送指令看看结果再编入程序中。
  • TA的每日心情
    开心
    2019-11-9 01:05
  • 签到天数: 63 天

    [LV.6]常住居民II

     楼主| 发表于 2019-6-28 09:16 | 显示全部楼层
    上海老王 发表于 2019-6-28 08:35
    Serial系列指令貌似都没用对哈,还是看看手册吧
    再有,确定一下该模块通讯协议中到底是字符还是16进制数 ...

    哎,丢人啊丢人...
    协议中说是16进制数据,那不是得把指令码转成16进制的数据传给模块么?用serial.print("AA 02 00 AC",HEX)么?指令码中间的空格是不是得去掉?
  • TA的每日心情
    开心
    2019-11-9 01:05
  • 签到天数: 63 天

    [LV.6]常住居民II

     楼主| 发表于 2019-7-1 09:16 | 显示全部楼层
    顶顶更健康!~
  • TA的每日心情
    开心
    2020-1-26 00:13
  • 签到天数: 1022 天

    [LV.10]以坛为家III

    发表于 2019-7-1 11:03 | 显示全部楼层
    忙了一上午,才看到
    serial.print("AA 02 00 AC",HEX)貌似不认

    serial.print(170,HEX);
    serial.print(2,HEX);
    serial.print(0,HEX);
    serial.println(172,HEX);

    这样试试
  • TA的每日心情
    开心
    2019-11-9 01:05
  • 签到天数: 63 天

    [LV.6]常住居民II

     楼主| 发表于 2019-7-1 11:15 | 显示全部楼层
    上海老王 发表于 2019-7-1 11:03
    忙了一上午,才看到
    serial.print("AA 02 00 AC",HEX)貌似不认

    辛苦辛苦!~我去试试看~
  • TA的每日心情
    开心
    2019-11-9 01:05
  • 签到天数: 63 天

    [LV.6]常住居民II

     楼主| 发表于 2019-7-1 11:54 | 显示全部楼层
    上海老王 发表于 2019-7-1 11:03
    忙了一上午,才看到
    serial.print("AA 02 00 AC",HEX)貌似不认

    表示又试了半天,还不行............
  • TA的每日心情
    开心
    2019-11-9 01:05
  • 签到天数: 63 天

    [LV.6]常住居民II

     楼主| 发表于 2019-7-1 12:21 | 显示全部楼层
    MACE 发表于 2019-7-1 11:34
    发送十六进制数据要用serial.write();
    十六进制数据要在数据前加上0x前缀;
    byte comd_A[4]={0xAA, 0x02,  ...

    谢谢您的回复,学习了!我根据您的代码通过上位机看到数据接收正常,但是还是不受控制...我决定放弃了...太邪门了
  • TA的每日心情
    慵懒
    2018-11-12 08:58
  • 签到天数: 37 天

    [LV.5]常住居民I

    发表于 2019-7-3 09:24 | 显示全部楼层
    Serial.print("\xAA\x02\x00\xAC");
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    [限时福利]5分钟带你快速了解新一代开发板:M5STACK
    [限时福利]5分钟带你快速
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    一块扩展板完成Arduino的10类37项实验(代码+图形+仿真)
    一块扩展板完成Arduino的1
    实验目录(动手做): 一、LED 实验 01 Blink:D13蓝色 LED 闪烁 02 Blink2:D12、D
    OLED 128*64自制可达10000000个选项的菜单(已更新)
    OLED 128*64自制可达10000
    OLED 128*64自制可达10000000个选项的菜单 温馨提示: 建议占个楼再食用本帖子
    【Arduino】u8g2中文字库制作教程 小白请进
    【Arduino】u8g2中文字库
    我知道对于这个话题许多大佬们都会,发这个贴子也算是炒冷饭了,所以一开始我也十分纠
    ESP8266 AT指令固件已更新至V1.7.2
    ESP8266 AT指令固件已更新
    ESP8266在乐鑫官网的AT指令固件已更新至V1.7.2,有兴趣的同学自行至官网下载。 官网链
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表