我遇到的确切问题与此主题相同:
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案例中的代码以解决这个问题吗?
答案 0 :(得分:0)
发送由0-1023代码(2字节)的每个半字节组成的ascii字符串,并用换行符(即/ n)附加。例如,如果要发送的十六进制代码是0x03FF(即十进制1023),则要发送的字符串将为0x30,0x33,0x46,0x46,0x0A。