极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14754|回复: 6

蓝牙

[复制链接]
发表于 2017-4-2 13:40:40 | 显示全部楼层 |阅读模式
求助!
使用了2个HC-05、2个Arduino uno、1和超声波
想实现:  从机检测距离,把距离传给主机
但是从Arduino的串口监视器来看,从机可以获得距离,但是主机收不到,如图。
参考了下面两个帖子
两个arduino通过HC-05通信数据乱码问题http://www.arduino.cn/forum.php? ... amp;highlight=HC-05
超声波测距+蓝牙传输+LCD1602应用教程http://www.geek-workshop.com/thread-3272-1-1.html
附上自己的程序:
  1. //主机程序//
  2. #include <SoftwareSerial.h>
  3. SoftwareSerial BT(8, 9); // 接收, 传送,程序中8为RX需要接hc-05的TXD,9为TX,需要接hc-05的RX。
  4. byte val = 0;
  5. void setup() {
  6. Serial.begin(38400);
  7. Serial.println("BT is ready!");
  8.   //HC-05默认,38400
  9. BT.begin(38400);
  10. }
  11. void loop() {
  12.   if(Serial.available()) {
  13.    val = Serial.read();
  14.    BT.print(val);
  15.   }

  16.   if (BT.available() != 0)
  17.   {
  18.     val=BT.parseInt();
  19.     Serial.println(val);
  20.   }
  21.   delay(50);
  22. }
复制代码


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

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

  18. }
复制代码

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

谢谢大家了!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2017-4-2 14:40:21 | 显示全部楼层
软串口波特率高了。建议不要使用软串口,直接用硬串口连接蓝牙模块。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-2 15:30:25 | 显示全部楼层
duanliangcong 发表于 2017-4-2 14:40
软串口波特率高了。建议不要使用软串口,直接用硬串口连接蓝牙模块。

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

使用道具 举报

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

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

使用道具 举报

发表于 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);
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-2 19:44:24 来自手机 | 显示全部楼层
duanliangcong 发表于 2017-4-2 15:51
软串口的波特率高于9600就会出现各种问题,硬串口的波特率一般达到115200都没事,所以尽量不要用软串口

好的,谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-2 19:45:24 来自手机 | 显示全部楼层
duanliangcong 发表于 2017-4-2 15:54
//主机程序//
char val;
void setup() {

哇!谢谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-18 21:42 , Processed in 0.039655 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表