我想检查我的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);
}
答案 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的串行端口。最简单的解决方案是最好的。