Непоследовательные полученные данные от Bluetooth (Android) - PullRequest
0 голосов
/ 24 февраля 2019

Я работаю над частью более крупного проекта, который требует от меня непрерывного отображения (на смартфоне) последовательных данных, которые были получены через связь Bluetooth между смартфоном и HC-05 (управляется с помощью Arduino).

Для начала я просто хочу, чтобы программа отображала на экране простой «Hello World».С тем, что у меня есть, текст изначально отображается правильно, как «Hello World».Тем не менее, когда текст отправляется в последующие моменты времени, на дисплее отображается «ello Worldd», затем «World World» и несколько других неправильных вариантов перед возвратом к правильной строке, а затем повторением.Очевидно, что я намерен сделать так, чтобы он постоянно отображал правильный текст (потому что в моем последнем проекте передаваемая строка не будет постоянной, но для простоты я решил, что было бы лучше сделать постоянную строку работающей, прежде чем двигаться вперед).

Мой базовый код Arduino выглядит следующим образом:

void setup() {
  Serial.begin(115200);
}
void loop() {
    Serial.write("Hello World");
    delay(2000);
}

Я также использую Android Studio, кодирую на Java.Я не особенно опытен, поэтому я основал свой код на учебнике.Мой код для моего обработчика выглядит следующим образом:

       mHandler = new Handler(){
            public void handleMessage(android.os.Message msg){
                if(msg.what == MESSAGE_READ){
                    String readMessage = null;
                    try {
                        readMessage = new String((byte[]) msg.obj, "UTF-8");
                        mReadBuffer.setText(readMessage);
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                }
                if(msg.what == CONNECTING_STATUS){
                    if(msg.arg1 == 1)
                        mBluetoothStatus.setText("Connected to Device: " + (String)(msg.obj));
                    else
                        mBluetoothStatus.setText("Connection Failed");
                }
            }
        };

Функция в коде, который, как я считаю, обрабатывает чтение входящих последовательных данных:

public void run() {
            byte[] buffer = new byte[1024];  // buffer store for the stream
            int bytes = 0; // bytes returned from read()

            // Keep listening to the InputStream until an exception occurs
            while (true) {

                try {
                    // Read from the InputStream
                    bytes = mmInStream.read(buffer);
                    if(bytes != 0) {
                        SystemClock.sleep(100);
                        mmInStream.read(buffer);
                    }
                    // Send the obtained bytes to the UI activity

                    mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
                            .sendToTarget();

                } catch (IOException e) {
                    break;
                }
            }
        }

Учитывая, что предыдущий текст, кажется, появляетсяЯ предполагаю, что проблема лежит где-то в буфере, однако я не совсем уверен, как это можно решить.Меня также смущает, почему иногда ведущие персонажи оказываются отрезанными.Возможно, это просто связано с моей простой неопытностью в Android Studio, но я не смог найти ответ на эту конкретную проблему, поэтому я надеюсь, что кто-то может указать на проблему, которую, возможно, я просто упускаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...