查看: 749|回复: 19

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

[复制链接]
  • TA的每日心情
    慵懒
    2019-8-16 15:57
  • 签到天数: 60 天

    [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, 下载次数: 2

  • TA的每日心情
    开心
    2019-8-24 00:17
  • 签到天数: 874 天

    [LV.10]以坛为家III

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

    [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-8-16 15:57
  • 签到天数: 60 天

    [LV.6]常住居民II

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

    [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-8-16 15:57
  • 签到天数: 60 天

    [LV.6]常住居民II

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

    辛苦辛苦!~我去试试看~
  • TA的每日心情
    慵懒
    2019-8-16 15:57
  • 签到天数: 60 天

    [LV.6]常住居民II

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

    表示又试了半天,还不行............
  • TA的每日心情
    慵懒
    2019-8-16 15:57
  • 签到天数: 60 天

    [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");
    文章有帮助,可以请我喝杯咖啡
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    Arduino lcd屏幕亮了但是不显示字符
    Arduino lcd屏幕亮了但是
    Arduino的lcd屏亮了但是上面没有字符显示,串进去的滑动变阻器也旋过了,但是还是没有
    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    [限时福利]5分钟带你快速了解新一代开发板:M5STACK
    [限时福利]5分钟带你快速
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    【Arduino】108种传感器模块系列实验(98)---L298N电机驱动板
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    两个ESP8266通过云端实现远程数据交互
    两个ESP8266通过云端实现
    原理简述:利用发布订阅模式。一个ESP8266作为消息发布者,另一个ESP8266作为消息订阅
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表