最近使用JDY-10M藍牙組網,需要Arduino收發(fā)數據,將遇到的一些問題與最終解決方法分享給大家,如果內容有問題,還請大家指點。
1、JDY-10M組網
關于如何JDY-10M如何組網網上介紹,這里不做介紹,這里貼一個鏈接。
(16條消息) JDY-10M藍牙簡易組網教程_jdy–10m 命令_小明ohhh的博客-CSDN博客
使用串口助手的時候,收發(fā)數據都正常,所以問題就是完成下圖的功能:①波特率115200②以HEX16進制發(fā)送數據③數據開頭帶AAFBFFF(后面為數據內容)。
2、發(fā)送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)。改為軟串口后就好了,上面發(fā)送的為-12.34。
之前接收是左邊這樣的(發(fā)的82),現在是右邊這樣(發(fā)的-12.34)
←自帶串口發(fā)(時對時錯)?
←軟串口發(fā)(沒有問題)?
如果需要發(fā)兩組或多組數據,不能連續(xù)使用.write(),中間需要delay()一下,否則串口沒法接收,代碼如下:
(我使用模塊發(fā)送數據時,發(fā)送數據長度不能超過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里面。
這樣就可以正常接收數據了,并且沒有亂碼。
下面是之前用的代碼,但是顯示數據也是時對時錯,并且時間上對不上,不建議大家使用,或者大家可以看看問題出在那里。文章來源:http://www.zghlxwxcb.cn/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 = "";
}
}
以上就是最近幾周本人的學習分享,如果有哪里不對還請大家擔待指正!謝謝!文章來源地址http://www.zghlxwxcb.cn/news/detail-461741.html
到了這里,關于Arduino串口發(fā)送與接收16進制數據(HEX)(數據亂碼)-JDY-10M組網的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!