来自Arduino的串口BT数据在Android中被切断,如何解决?

时间:2014-02-17 14:58:32

标签: android android-bluetooth

我遇到的确切问题与此主题相同:

Why does the serial BT data I received get chopped out?

所以我知道我需要制作分隔符并解析,这就是我所需要的,但遗憾的是,该线程的答案还不够具体。

我需要将Arduino中的模拟数据(从0-1023)发送到Android设备,所以我在发送之前在每个字符串的末尾添加了一个“n”作为分隔符:

    #include <SoftwareSerial.h>

    int bluetoothTx = 2;
    int bluetoothRx = 3;
    boolean toggle = true;

    SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);

    void setup()
    {
      //Setup usb serial connection to computer
      Serial.begin(9600);

      //Setup Bluetooth serial connection to android
      bluetooth.begin(115200);
      bluetooth.print("$$$");
      delay(100);
      bluetooth.println("U,57600,N");
      bluetooth.begin(57600);
    }

    void loop()
    { 
      //Read from serial to bluetooth

    while(1)   //to reduce jitters
      {
        String sensorString =  String(analogRead(A0), DEC);
        sensorString = sensorString + "n";
        bluetooth.println(sensorString);
        delay(100);
      }
    }

这是针对Arduino方面的。

对于Android方面,我使用了BluetoothChat示例,因此在mHandler和MESSAGE_READ的switch-case中,代码是这样的:

    case MESSAGE_READ:
        byte[] readBuf = (byte[]) msg.obj;
        // construct a string from the valid bytes in the buffer
        String readMessage = new String(readBuf, 0, msg.arg1);

        mConversationArrayAdapter.add(readMessage);

其中mConversationArrayAdapter是String ArrayAdapter。我可以知道如何修改MESSAGE_READ案例中的代码以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

发送由0-1023代码(2字节)的每个半字节组成的ascii字符串,并用换行符(即/ n)附加。例如,如果要发送的十六进制代码是0x03FF(即十进制1023),则要发送的字符串将为0x30,0x33,0x46,0x46,0x0A。