Неправильные данные, проанализированные в Bluetooth, полученные в Android от Arduino - PullRequest
0 голосов
/ 30 апреля 2019

Я получаю значение 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?

...