Я работаю над частью более крупного проекта, который требует от меня непрерывного отображения (на смартфоне) последовательных данных, которые были получены через связь 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, но я не смог найти ответ на эту конкретную проблему, поэтому я надеюсь, что кто-то может указать на проблему, которую, возможно, я просто упускаю.