Я получаю значение 3-осевого акселерометра от модуля Bluetooth HC05 на телефон Android.У меня есть рабочий код следующим образом.Это поток после создания успешного соединения и сокета.
private class ConnectedThread extends Thread {
private final BluetoothSocket mmSocket;
private final InputStream mmInStream;
private final OutputStream mmOutStream;
public ConnectedThread(BluetoothSocket socket) {
mmSocket = socket;
InputStream tmpIn = null;
OutputStream tmpOut = null;
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) { }
mmInStream = tmpIn;
mmOutStream = tmpOut;
}
public void run() {
byte[] buffer = new byte[1024];
int begin = 0;
int bytes = 0;
while (true) {
try {
bytes += mmInStream.read(buffer, bytes, buffer.length - bytes);
for(int i = begin; i < bytes; i++) {
if(buffer[i] == "#".getBytes()[0]) {
mHandler.obtainMessage(1, begin, i, buffer).sendToTarget();
begin = i + 1;
if(i == bytes - 1) {
bytes = 0;
begin = 0;
}
}
}
} catch (IOException e) {
break;
}
}
}
public void write(byte[] bytes) {
try {
mmOutStream.write(bytes);
} catch
(IOException e) { }
}
public void cancel() {
try {
mmSocket.close();
} catch (IOException e) { }
}
}
Теперь класс Handler выглядит следующим образом.
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
byte[] writeBuf = (byte[]) msg.obj;
int begin = (int) msg.arg1;
int end = (int) msg.arg2;
switch (msg.what) {
case 1:
String writeMessage = new String(writeBuf);
writeMessage = writeMessage.substring(begin, end);
String data = writeMessage.toString();
String s[] = data.split(";");
txtX.setText(s[0]);
txtY.setText(s[1]);
txtZ.setText(s[2]);
break;
}
}
};
Здесь все txtX, txtY, txtZ - все текстовые представления,Моя проблема заключается в том, что ускорение вдоль осей X и Z, т.е. значения s [0] и s [1], колеблется с подозрением.Я имею в виду, что вибрация оси Z обычно составляет около 1400, но иногда она становится 14000 или даже 1400000, как это.И для s [0] реальное передаваемое значение было около 508, но для доли времени значение становится 06 или 08. Кто-нибудь может найти, что не так при чтении с Bluetooth?