Очистка полученных последовательных данных от Arduino через соединение BlueTooth - PullRequest
1 голос
/ 29 июня 2019

У меня есть плата Arduino UNO, подключенная через Bluetooth к моему телефону Android. Все отлично. Любая команда с телефона Android получена и выполнена в Arduino. Но обратная связь от arduino глючная.

Это первые данные от Arduino

device information :
pin 4 set to 0
pin 5 set to 0
pin 6 set to 0

но вторые данные приходят вот так

change pin 4 to 1n :
pin 4 set to 0
pin 5 set to 0
pin 6 set to 0

что я ожидал, это

change pin 4 to 1

Вот код Android, который я получаю из интернета

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");
      //readMessage[bytes] = '\0';
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }
    mReadBuffer.append(readMessage+"\n");
  }

  if(msg.what == CONNECTING_STATUS){
    if(msg.arg1 == 1)
      mBluetoothStatus.setText("Connected to Device: " + (String)(msg.obj));
    else
      mBluetoothStatus.setText("Connection Failed");
  }
  }
};

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 bytes; 

  while (true) {
    try {

      bytes = 0;
      bytes = mmInStream.available();
      if(bytes != 0) {
        SystemClock.sleep(100); 
        bytes = mmInStream.available(); 
        bytes = mmInStream.read(buffer, 0, bytes); 

        mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer).sendToTarget(); 
      }
    } catch (IOException e) {
      e.printStackTrace();
      break;
    }
  }
}


public void write(String input) {
  byte[] bytes = input.getBytes();           
  try {
    mmOutStream.write(bytes);
  } catch (IOException e) {
    Toast.makeText(getApplicationContext(), "Show Paired Devices", Toast.LENGTH_SHORT).show();
    mReadBuffer.append("Error Sending Data\n");
  }
}

public void cancel() {
  try {
    mmSocket.close();
  } catch (IOException e) {

  }
}
}

пожалуйста, помогите.

1 Ответ

0 голосов
/ 02 июля 2019

Я не знаю, как это могло произойти, но ответ ясен ... кто-то может мне объяснить, или, может быть, есть лучший ответ ??

mHandler = new Handler(){
  public void handleMessage(android.os.Message msg){

    if(msg.what == MESSAGE_READ){
      String readMessage = "";
      /*
      try {
        byte[] readBuf = (byte[]) msg.obj;
        readMessage = new String(readBuf, "UTF-8");
        readMessage = new String(readBuf, 0,13);
        readMessage[bytes] = '\0';
      } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
      }
      */
      readMessage = new String((byte[]) msg.obj, 0, msg.arg1);
      mReadBuffer.append(readMessage+"\n");
    }

    if(msg.what == CONNECTING_STATUS){
      if(msg.arg1 == 1)
        mBluetoothStatus.setText("Connected to Device: " + (String)(msg.obj));
      else
        mBluetoothStatus.setText("Connection Failed");
    }
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...