получать данные мусора при отправке строки из Arduino на Android с помощью HC-05 - PullRequest
0 голосов
/ 24 февраля 2019

все в названии.Я получаю это, когда я отправляю String данные из Arduino на Android.Я пытался все, чтобы получить истинное значение, но ничего.Пожалуйста помоги.Редактирует часть Arduino здесь:

#include <SoftwareSerial.h>
#define rxPin 19
#define txPin 18
SoftwareSerial BTserial(rxPin, txPin);

void setup() {
  // put your setup code here, to run once:
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  BTserial.begin(38400);
  Serial.begin(9600);

}

void loop() {
  // put your main code here, to run repeatedly:
  BTserial.println("ROGER AIME LES POMMES. HEIN LE SALAUD");
  delay(5000);
}

Android part :

public void run() {
        byte[] buffer = new byte[1024];
        int bytes;
        while (true) {
            try {
                bytes = mmInStream.read(buffer);//read bytes from input buffer
                bluetoothIn.obtainMessage(handlerState, bytes, -1, buffer).sendToTarget();
            }

            catch (IOException e) {
                break;
            }
        }
    }

In onCreate

bluetoothIn = new Handler() {
        public void handleMessage(android.os.Message msg) {
            if (msg.what == handlerState) {
                byte[] readBuff = (byte[]) msg.obj;
                String readMessage = new String(readBuff,0,msg.arg1);
                blue_tv2.setText("Data Received = " + readMessage);
                Log.d("", "handleMessage: "+readMessage);
            }
        }
    };

Моя консоль при запуске.

D/: handleMessage: z
D/: handleMessage: z_�~�
D/: handleMessage: z
D/: handleMessage: z_�~�
D/: handleMessage: 7
D/: handleMessage: z_�~�
D/: handleMessage: 7
D/: handleMessage: z_�~�

1 Ответ

0 голосов
/ 24 февраля 2019

mminStream.read () читает и возвращает один байт;Вы действительно никогда не читаете байты в буфер и декодируете буфер «все 0 байтов»;

читайте о String конструкторе и InputStream ;

Я просто исправлю те части, в которых вы ошибаетесь, и больше ничего не трогайте!;

public void run() {
    byte[] buffer = new byte[1024];
    int bytes;//rename this to something else; the name doesn't explain what this variable actually holds and might cause confusion
    String temp_msg="";
    while (true) {
        try {
            bytes = mmInStream.read(buffer);//bytes now holds the number of read bytes which are writen to buffer;
            String readMessage = new String(buffer, 0, bytes);//now this decodes buffer bytes residing in indexes from 0 to bytes value
            //now readmessage holds the message
            //rest of the code

О проблеме на транспортном уровне (бессмысленные данные): это может быть из-за неправильной настройки скорости передачи; прочитайте это и это (из того, что я понял, 115200, вероятно, работает!)

...