我通过蓝牙模块从arduino发送数据。我只是流式传输不同的整数;
int bluetoothData;
//give value to bluetoothData
Serial1.println(bluetoothData);
在我的Android代码中,我有一个蓝牙插槽,可以从arduino接收数据。数据由处理程序处理。这就是问题所在,有时候数据会被误读。例如,我发送了' 100',而是Handler保存在我的数据库' 000'或者我发送Â 194'所读的内容是' 994'。有时这样的阅读错误会在每15次出现一次。有时根本不会有任何错误。有人知道原因是什么吗?它是蓝牙模块的一些硬件故障,是我读取数据的方式等。以下是线程接收数据的Android代码:
final int RECIEVE_MESSAGE = 1;
...
mmInStream = socket.getOutputStream();
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) {
bytes = mmInStream.read(buffer);
h.obtainMessage(RECIEVE_MESSAGE, bytes, -1, buffer).sendToTarget();
}
以下是处理程序本身的代码:
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case RECIEVE_MESSAGE:
byte[] readBuf = (byte[]) msg.obj;
String strIncom = new String(readBuf, 0, msg.arg1);
sb.append(strIncom);
int endOfLineIndex = sb.indexOf("\r\n");
if (endOfLineIndex > 0) {
String sbprint = sb.substring(0, endOfLineIndex);
sb.delete(0, sb.length());
btData = Integer.parseInt(sbprint);
M = btData;
insert = mDataBaseHelper.insert(M,DataBaseHelper.TABLE_Temp);
}