Arduino串口发送与接收16进制数据(HEX)(数据乱码)-JDY-10M组网

这篇具有很好参考价值的文章主要介绍了Arduino串口发送与接收16进制数据(HEX)(数据乱码)-JDY-10M组网。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近使用JDY-10M蓝牙组网,需要Arduino收发数据,将遇到的一些问题与最终解决方法分享给大家,如果内容有问题,还请大家指点。

1、JDY-10M组网

关于如何JDY-10M如何组网网上介绍,这里不做介绍,这里贴一个链接。

(16条消息) JDY-10M蓝牙简易组网教程_jdy–10m 命令_小明ohhh的博客-CSDN博客

使用串口助手的时候,收发数据都正常,所以问题就是完成下图的功能:①波特率115200②以HEX16进制发送数据③数据开头带AAFBFFF(后面为数据内容)。

Arduino串口发送与接收16进制数据(HEX)(数据乱码)-JDY-10M组网

2、发送16进制数据

#include <SoftwareSerial.h>
SoftwareSerial JDY(8,9);
char a[] = {0xAA,0XFB,0xFF,0xFF,0x2D,0x31,0x32,0x2E,0x33,0x34};
String str;

void setup() {
    JDY.begin(115200);
}
void loop() {
    JDY.write(a,10);
    delay(500);
}

之前代码用的硬串口Serial.write(),就出现了两个问题:①接收数据时对时错②接收数据的时间不确定(不是500ms)。改为软串口后就好了,上面发送的为-12.34。

之前接收是左边这样的(发的82),现在是右边这样(发的-12.34)

Arduino串口发送与接收16进制数据(HEX)(数据乱码)-JDY-10M组网←自带串口发(时对时错) Arduino串口发送与接收16进制数据(HEX)(数据乱码)-JDY-10M组网←软串口发(没有问题) 

如果需要发两组或多组数据,不能连续使用.write(),中间需要delay()一下,否则串口没法接收,代码如下:

(我使用模块发送数据时,发送数据长度不能超过14,否则串口接收不到数据,不清楚为什么)

#include <SoftwareSerial.h>
SoftwareSerial JDY(8,9);
char a[] = {0xAA,0XFB,0xFF,0xFF,0x2D,0x31,0x32,0x2E,0x37,0x38,0x35,0x36,0x31,0x31};
char b[] = {0xAA,0XFB,0xFF,0xFF,0x2D,0x31,0x31,0x2E,0x31,0x31,0x31,0x31,0x31,0x31};
String str;

void setup() {
  Serial.begin(115200);
  JDY.begin(115200);
}
void loop() {
    JDY.write(a,14);
    delay(500);
    JDY.write(b,14);
    delay(500);
}

3、接收16进制数据

byte variable[80];
byte index = 0;
char data[10];
String a;
void setup()
{
Serial.begin(115200); 
}
void loop(){
  while( Serial.available()>0 ){
    byte serialData = Serial.read();
    variable[index++] = serialData;

    if(index==13){
   for (int i=3;i<13;i++){
     if(variable[i]==48){
      data[i-3]='0';}
      else if(variable[i]==49){
      data[i-3]='1';}
      else if(variable[i]==50){
      data[i-3]='2';}
      else if(variable[i]==51){
      data[i-3]='3';}
      else if(variable[i]==52){
      data[i-3]='4';}
      else if(variable[i]==53){
      data[i-3]='5';}
      else if(variable[i]==54){
      data[i-3]='6';}
      else if(variable[i]==55){
      data[i-3]='7';}
      else if(variable[i]==56){
      data[i-3]='8';}
      else if(variable[i]==57){
      data[i-3]='9';}
      else if(variable[i]==45){
      data[i-3]='-';}
      else if(variable[i]==46){
      data[i-3]='.';}
     delay(10);
     }
  for (int i=0;i<10;i++){
  a+=data[i];}
  Serial.print(a);
  a="";
  index = 0;
  String data="";
  Serial.println("");
}
}
}

因为我接收的数据总共13位,所以index=13,有用的数据从第四位开始的,所以i=3,大家根据自己情况调整。

这里面serialData为接收的原始数据,是ASCII对应的值,所以后面给改成了对应的字符,存在了a里面。

这样就可以正常接收数据了,并且没有乱码。

下面是之前用的代码,但是显示数据也是时对时错,并且时间上对不上,不建议大家使用,或者大家可以看看问题出在那里。

//此代码有问题
#include <String.h>
String comdata = "";

void setup()
{Serial.begin(115200);
BT.begin(115200);}
void loop()
{
    while (BT.available() > 0)  
    {
      comdata += char(BT.read());
      delay(2);
    }
    if (comdata.length() > 0)
    {
      Serial.println(comdata);
      comdata = "";
    }
}

以上就是最近几周本人的学习分享,如果有哪里不对还请大家担待指正!谢谢!文章来源地址https://www.toymoban.com/news/detail-461741.html

到了这里,关于Arduino串口发送与接收16进制数据(HEX)(数据乱码)-JDY-10M组网的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python发送16进制数据

    可以使用Python的内置函数 bytes.fromhex() 来将一个16进制字符串转换为字节序列,然后将字节序列发送到指定的位置。 以下是一个示例代码,假设要将16进制字符串 \\\"0A0B0C0D\\\" 发送到IP地址为 192.168.0.100 ,端口号为 8080 的设备上:

    2024年02月12日
    浏览(30)
  • 串口通信-发送和接收数据

    目录 通信方式 硬件电路 软件部分 USART外设(同步/异步收发器) 波特率 引脚复用 初始化基本流程 发送 接收 语言简述 常用的函数 使用的结构体 引脚模式 打印数据的三种方法 使用printf 在实际的串口中,只能发送二进制数,也就是十六进制的最直接数据。如果想发送字符,

    2024年02月12日
    浏览(57)
  • 【前端】WebSocket接收二进制数据转JSON并解决中文乱码问题(ArrayBuffer转json)

    WebSocket与mqtt服务器通信,接收二进制数据并将其转为Json使用。一般方式都会出现中文乱码问题。

    2024年01月22日
    浏览(65)
  • stm32串口自定义协议接收一串十六进制数据(将其中两个字节转化为十进制数据)+部分串口基础知识

    位(bit): 二进制数中的一个数位,可以是0或者1,是计算机中数据的最小单位。 字节(Byte): 计算机中数据的基本单位,每8位组成一个字节。各种信息在计算机中存储、处理至少需要一个字节。 例如,一个ASCII码用一个字节表示,一个汉字用两个字节表示。 字(Word):

    2023年04月08日
    浏览(59)
  • 串口发送数据,只接收到00的原因之一

    1、环境: STM32F103RCT6 KEIL 5 2、现象: 不管我发送任何类型的数据,在串口助手上显示接收到的都是00, 我头很大,去网上找了别人的代码对比检查。 终于,细心的我发现,原来粗心的我少了一行代码。 3、解决方案1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); 好了,加上这一行

    2024年02月12日
    浏览(86)
  • 最详细STM32,cubeMX串口发送,接收数据

    这篇文章将详细介绍 串口 发送数据,接受数据。 实验开发板:STM32F103C8T6。 所需软件:keil5 , cubeMX 。 实验目的:了解 串口的基础知识,掌握串口如何发送,接收数据 。 实验:串口发送数据点亮 led。 如果想了解串口的基础知识可以参考我之前的文章: STM32Cube串口USART发送

    2024年02月04日
    浏览(68)
  • STM32实现三个串口同时开启发送接收数据

            实现STM32开通三个串口,每个串口都可以实现接收和发送数据。          编程时,严禁在中断函数中写入发送串口数据代码,否则会出错,具体原因不清楚(有大佬知道的话帮我指出),可能原因是DR寄存器冲突导致。         RX,TX连接到A9,A10使用串口1,使

    2024年04月13日
    浏览(73)
  • C#与松下PLC串口通讯发送,接收数据

    记录与学习 第一次跟PLC打交道,C#与松下plc交互读写功能,很多东西都是自己在网上找的,整理了下做个记录  引入“Panasonic.dll”文件 下载地址 百度盘百度网盘 请输入提取码  提取码:8vnm  public Panasonic.PLC Sp_PLC;   Sp_PLC.WCS(\\\"R\\\", \\\"1\\\", true);//提示PLC软件初始化完成,可以正常工

    2023年04月12日
    浏览(51)
  • C#串口通信从入门到精通(26)——多个串口多个线程发送数据和接收数据

    我们在开发串口程序的过程中有时候会遇到多个串口,并且多个串口也需要在多个线程进行操作,本文就来讲解如何实现多个串口在多线程下的安全发送与接收。 我们首先使用虚拟串口助手虚拟COM1、COM2这一对串口;COM3、COM4这一对串口,然后使用代码操作COM1,然后打开一个

    2024年02月11日
    浏览(57)
  • P27[9-3]STM32:串口通信(串口发送)(内含:1.接线图+2.实物图+3.代码部分+4.解决串口发送数据,数据是汉字,结果发送结果为乱码的现象)

    1.接线图如下: 跳线帽接在4~5引脚,2,3引脚连接PA9和PA10引脚。下图也可得出USART接PA9和PA10引脚。 TX和RX是交叉连接。PA9(黄线)是TX,接RXD。PA9(绿线)是RXD,接TX. 图中的串口模块和STINK都接电脑上,使之拥有独立供电。 2.实物图: 黄色为跳线帽,接4~5引脚。

    2024年02月09日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包