所以我现在面临着一个问题。任何建议都会很好。 首先我使用我的代码从arduino接收数据,然后我使用bluetoothChat并更改了uuid,我可以配对,一切都很好,但是如果我从arduino发送整个字符串到android我只得到那个字符串的一部分。 如果我使用谷歌播放的蓝牙终端,一切都还可以,并且在描述中它说它是由蓝牙聊天样本制作的。
Code Arduino
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 9); //RX,TX
long int i = 0;
void setup(){
mySerial.begin(9600);
}
void loop(){
mySerial.print("This is a message n. ");
mySerial.println(i);
i++;
delay(100);
}
Android代码:蓝牙聊天示例
Android上收到的消息的例子:
要发送的消息!
因此,我认为在模块配对时我会等待第一条消息。 因为每次我都会。
is is a message n. 466
This is a message n.467
.
. ( here I get correct messages )
.
This is a message n.470
message n. 495
.
.
and after the first messages I get messages like
ssage n.534
t
essage n.m
essage n.
535
( I neved again get an entire message )
处理程序:
h = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case RECIEVE_MESSAGE: // if receive massage
byte[] readBuf = (byte[]) msg.obj;
String strIncom = new String(readBuf, 0, msg.arg1); // create string from bytes array
sb.append(strIncom); // append string
int endOfLineIndex = sb.indexOf("\r\n"); // determine the end-of-line
if (endOfLineIndex > 0) { // if end-of-line,
String sbprint = sb.substring(0, endOfLineIndex); // extract string
sb.delete(0, sb.length()); // and clear
Log.d("Arduino", "Mesaj:"+ sbprint.toString());
}
Log.d("Arduino", "...Mesaj:"+ sb.toString() + " Byte:" + msg.arg1 + "...");
break;
}
};
};
InputStream监听器
public void run() {
byte[] buffer = new byte[256]; // buffer store for the stream
int bytes; // bytes returned from read()
// Keep listening to the InputStream until an exception occurs
while (true) {
try {
// Read from the InputStream
bytes = mmInStream.read(buffer); // Get number of bytes and message in "buffer"
h.obtainMessage(RECIEVE_MESSAGE, bytes, -1, buffer).sendToTarget(); // Send to message queue Handler
} catch (IOException e) {
break;
}
}
}
答案 0 :(得分:1)
请注意,您正在使用串行端口的软件仿真,因此时序不如硬件UART那么好。
可能是以下两个可能问题中的一个或两个:
1)启动和停止位未正确定时,导致背靠背字节。设置字符串时会发生这种情况,而不是一次啄一个字符串。 解决方案是将每个密钥分开。
2)波特率与容差不匹配。在HC05和Arduino上缓慢降低或加快波特率将更好地匹配时间。
我还建议您确保您的库是SoftwareSerial,声明它是 NewSoftSerial 。它修复了许多问题。它是在Arduino IDE 1.0。+核心库中实现的,所以如果你有最新的IDE,你应该拥有它。