无法从arduino中的蓝牙模块接收正确的数据

时间:2015-08-09 11:49:07

标签: android bluetooth arduino

我想检查我的arduino蓝牙模块是否有效,所以我找了一些简单的教程,如何连接和编程arduino以便使用蓝牙。

我用这个原理图来连接我的arduino和BT。 http://cdn.instructables.com/F4V/PPKD/HITAAYZC/F4VPPKDHITAAYZC.LARGE.jpg

我成功地将我的BT模块与手机和平板电脑配对(当时是一个),我也可以通过BT模块将数据发送到此设备(手机/平板电脑)。 不幸的是,我无法从我的设备收到任何正确的数据。

我尝试了两种方法:

SoftwareSerial连接 - 当我检查BTSerial.available()>0(向任何提到的设备发送数据工作正确)时,我没有任何内容。

硬件串行连接 - 在Serial1 / Serial2 / Serial3上没有成功但至少在我检查Serial1(例如)传入的字节时,我得到大约1字节传入的信息。不幸的是它有些错误一种数据,因为如果我通过SENA BTterm从手机发送char“a”,我得到0(作为int)和一些奇怪的字符(如果我将这些数据存储在char变量中)。

我认为如果我不能与任何其他设备建立连接,我的BT模块工作正常。

我使用的一些代码:

软件序列号:

#include <SoftwareSerial.h>
SoftwareSerial BTserial(2, 3); // RX | TX
// Connect the HC-05 TX to Arduino pin 2 RX. 
// Connect the HC-05 RX to Arduino pin 3 TX through a voltage divider.
// 

char c = ' ';

void setup() 
{
    Serial.begin(9600);
    Serial.println("Arduino is ready");

    // HC-05 default serial speed for commincation mode is 9600
    BTserial.begin(9600);  
}

void loop()
{
    // Keep reading from HC-05 and send to Arduino Serial Monitor
    //Serial.write("yolo");
    if (BTserial.available() > 0)
    {  
        Serial.write("yolo");
        c = BTserial.read();
        Serial.write(c);
    }

    // Keep reading from Arduino Serial Monitor and send to HC-05
    if (Serial.available() > 0)
    {
        //Serial.write("yolo");
        c =  Serial.read();
        BTserial.println(c);  
    }
}

硬件序列版:

char data;
char data2;
void setup() {
  // put your setup code here, to run once:
  Serial1.begin(9600);
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  if(Serial1.available() > 0)
  {
    Serial.print("Incoming bytes:");
    Serial.println(Serial1.available());
    data = Serial1.read();
    Serial.println(data);
  }

  data2 = Serial.read();

  if(data2 != -1)
  {
    Serial.print( "Sending: ");
    Serial.println( data2);
    Serial1.println(data2);
  }

  //delay(200);
}

2 个答案:

答案 0 :(得分:2)

我在这里发布我的解决方案,因为我遇到了同样的问题,但无法在任何地方找到解决方案。所以我希望这能帮助那里的许多人。如果您有Arduino Mega板并且正在使用软件串行库,请记住,并非所有板上的引脚都可用作RX。

如图书馆子网站所述: “并非Mega和Mega 2560上的所有引脚都支持更改中断,因此只有以下内容可用于RX:10,11,12,13,14,15,50,51,52,53,A8(62),A9 (63),A10(64),A11(65),A12(66),A13(67),A14(68),A15(69)“

此处提供更多信息:https://www.arduino.cc/en/Reference/SoftwareSerial

希望这对我有帮助

答案 1 :(得分:0)

我的问题的解决方案是简单地改变将与BT模块通信到Serial0的串行端口。最简单的解决方案是最好的。