最近使用JDY-10M蓝牙组网,需要Arduino收发数据,将遇到的一些问题与最终解决方法分享给大家,如果内容有问题,还请大家指点。
1、JDY-10M组网
关于如何JDY-10M如何组网网上介绍,这里不做介绍,这里贴一个链接。
(16条消息) JDY-10M蓝牙简易组网教程_jdy–10m 命令_小明ohhh的博客-CSDN博客
使用串口助手的时候,收发数据都正常,所以问题就是完成下图的功能:①波特率115200②以HEX16进制发送数据③数据开头带AAFBFFF(后面为数据内容)。
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)
←自带串口发(时对时错) ←软串口发(没有问题)
如果需要发两组或多组数据,不能连续使用.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里面。
这样就可以正常接收数据了,并且没有乱码。
下面是之前用的代码,但是显示数据也是时对时错,并且时间上对不上,不建议大家使用,或者大家可以看看问题出在那里。文章来源:https://www.toymoban.com/news/detail-461741.html
//此代码有问题
#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模板网!