liuhu512 发表于 2017-4-2 13:40:40

蓝牙

求助!
使用了2个HC-05、2个Arduino uno、1和超声波
想实现:从机检测距离,把距离传给主机
但是从Arduino的串口监视器来看,从机可以获得距离,但是主机收不到,如图。
参考了下面两个帖子
两个arduino通过HC-05通信数据乱码问题http://www.arduino.cn/forum.php?mod=viewthread&tid=42860&highlight=HC-05
超声波测距+蓝牙传输+LCD1602应用教程http://www.geek-workshop.com/thread-3272-1-1.html
附上自己的程序:
//主机程序//
#include <SoftwareSerial.h>
SoftwareSerial BT(8, 9); // 接收, 传送,程序中8为RX需要接hc-05的TXD,9为TX,需要接hc-05的RX。
byte val = 0;
void setup() {
Serial.begin(38400);
Serial.println("BT is ready!");
//HC-05默认,38400
BT.begin(38400);
}
void loop() {
if(Serial.available()) {
   val = Serial.read();
   BT.print(val);
}

if (BT.available() != 0)
{
    val=BT.parseInt();
    Serial.println(val);
}
delay(50);
}

从机程序:
   //从机程序//
#include "SR04.h"
#include <SoftwareSerial.h>
SoftwareSerial BlueTooth(8, 9); //创建虚拟串口,Pin8 Rx,Pin9 Tx
    #define TRIG_PIN 2
    #define ECHO_PIN 3
    SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);   

void setup() {
BlueTooth.begin(38400);
Serial.begin(38400);
}
void loop() {
int val;
val = sr04.Distance();
Serial.println(val);
BlueTooth.println((byte)val);//通过蓝牙传出数据,注意此处必须要设置传出数据为byte,否则接受时会因ASIC变为乱码
delay(1000);

}
此外,蓝牙的主从机已经配对好,波特率为:38400
向前用串口测试软件测试主从机是可以互相发送数据的的。

谢谢大家了!

duanliangcong 发表于 2017-4-2 14:40:21

软串口波特率高了。建议不要使用软串口,直接用硬串口连接蓝牙模块。

liuhu512 发表于 2017-4-2 15:30:25

duanliangcong 发表于 2017-4-2 14:40
软串口波特率高了。建议不要使用软串口,直接用硬串口连接蓝牙模块。

也就是说,不用SoftwareSerial这个库,而是直接用Arduino上的TX和RX?
那么void setup()里的波特率是不是也要相应的调低呢?

duanliangcong 发表于 2017-4-2 15:51:29

liuhu512 发表于 2017-4-2 15:30
也就是说,不用SoftwareSerial这个库,而是直接用Arduino上的TX和RX?
那么void setup()里的波特率是不 ...

软串口的波特率高于9600就会出现各种问题,硬串口的波特率一般达到115200都没事,所以尽量不要用软串口

duanliangcong 发表于 2017-4-2 15:54:22

本帖最后由 duanliangcong 于 2017-4-2 15:55 编辑

//主机程序//
char val;
void setup() {
Serial.begin(38400);
}
void loop() {
if(Serial.available()) {
   val = Serial.read();
   Serial.print(val);
}
delay(50);
}



//从机程序//
#include "SR04.h"
#define TRIG_PIN 2
#define ECHO_PIN 3
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);   

void setup() {
Serial.begin(38400);
}
void loop() {
int val;
val = sr04.Distance();
Serial.println(val);
delay(1000);
}

liuhu512 发表于 2017-4-2 19:44:24

duanliangcong 发表于 2017-4-2 15:51
软串口的波特率高于9600就会出现各种问题,硬串口的波特率一般达到115200都没事,所以尽量不要用软串口

好的,谢谢

liuhu512 发表于 2017-4-2 19:45:24

duanliangcong 发表于 2017-4-2 15:54
//主机程序//
char val;
void setup() {


哇!谢谢!
页: [1]
查看完整版本: 蓝牙