这个问题之后 Bluetooth connection in Android > 4.1.2 我通过反复尝试连接一次迭代来强制连接来修复,现在我还遇到了Android / Arduino通信的另一个问题。 我的硬件是Nexus 7 MY2012,Android 4.3,Arduino UNO R3和BT模块RN42。
从Android我发送一个字节数组到Arduino得到一个字符串。 一开始,使用Baudrate 115200并且没有奇偶校验,只有第一个字节到达正确,其余部分显然不匹配(主要是以重复方式)。 在RN42模块中设置奇偶校验EVEN后,我看到至少前3个字节正确到达,其余的都搞砸了。 下面是Android通信的核心部分(BT的初始化基本上遵循SDK示例)。它位于AsyncTask中用于管理连接工作的类中:
public void write(String message) {
Log.d(TAG, "...Data to send: " + message + "...");
byte[] msgBuffer = message.getBytes();
try {
mmOutStream.write(msgBuffer);
} catch (IOException e) {
mHardwareToServiceHdlr.obtainMessage(MSG_ERR_BT_WRITE).sendToTarget();
Log.d(TAG, "...Error data send: " + e.getMessage() + "...");
}
}
和Arduino sketch
#include <SoftwareSerial.h>
#include <Streaming.h>
const int bluetoothTx = 2;
const int bluetoothRx = 3;
byte incomingByte;
String incomingString;
SoftwareSerial bluetooth(bluetoothTx,bluetoothRx);
void setup() {
Serial.begin(115200);
bluetooth.begin(115200);
bluetooth.print("$$$");
delay(100);
bluetooth.println("U,115K,E");
bluetooth.begin(115200);
delay(100);
}
void loop(){
if (bluetooth.available() > 0) { // if the data came
incomingByte = bluetooth.read(); // read byte
Serial.println((char)incomingByte);
}
}
如果我向Arduino发送一个字符串,例如&#34; hello horld&#34;这就是我在串行监视器中获得的一系列传输:
hel,o wo2ld
hel<o wo2ld
hel,o7orld
hel,o wo2ld
hel,o wo2ld
hel<o7or6d
hel,o wo2ld
hel,o wo2ld
hel,o wo2ld
hel<o wo2ld
hel,o7orld
hel<o wo2ld
这只是示例,结果还取决于我将字符串发送到Arduino的频率。 大多数时候,第四个和第九个字节(但并不总是以相同的方式,并不总是只有它们)不匹配。
将数据从Arduino传输到Android似乎可以解决任何特殊问题。
任何帮助都会受到很大的影响,这件事让我疯狂,因为我需要传输超过3个字节的数据。 感谢
答案 0 :(得分:0)
您的设置可能存在多个问题:
begin()
。如果您需要清空缓冲区,请在bluetooth.flush()
之后和延迟之前使用println()
。取自SoftwareSerial
docs:
如果使用多个软件串行端口,则一次只能有一个接收数据。
尝试使用UART作为串行端口,而不是使用bit-banged串口。
Arduino UNO仅支持针脚2和3的中断,并且它们经常用于其他内容,检查它们在您的设计中是否完全免费。
尝试使用较慢的波特率,您的布局甚至可能出现115200 bps的RF问题。
如果以前的方法不起作用,请尝试在执行主循环中的Serial.print
之前将字符存储在缓冲区中。完成后,最后打印出来,这样(注意边界检查):
char buffer[MAX_LEN];
unsigned int count = 0;
void loop(){
if (bluetooth.available() > 0) { // if the data came
buffer[count++] = bluetooth.read(); // read byte
}
buffer[count] = '\0';
Serial.print(buffer);
count = 0;
}
答案 1 :(得分:0)
请确保明确地将设备与Android手机的设置配对。通常,对代码为1234.如果在Arduino上空闲,则首选硬件Tx,Rx引脚。 96200波特率通常更好