Чтобы прочитать все байты вместе, вам нужно разделить данные на "\ n" или "\ r" или "\ r \ n" в вашем коде.
Например: если вы хотите отправить данные из Arduino в приложение Android через Bluetooth:
(код Arduino):
int count =0;
int sensorPin = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
int val= analogRead(sensorPin);
if(val<threshold){
a++;
}
else{
delay(2);
count = count + 1;
Serial.print(count);
Serial.print("\n");
}
А теперь, чтобы прочитать отправленные данные (значение переменной 'count'), вот код Android Studio:
private class ConnectedThread extends Thread {
private final InputStream mmInStream;
public ConnectedThread(BluetoothSocket socket) {
InputStream tmpIn = null;
// Get the input streams, using temp objects because
// member streams are final
try {
tmpIn = socket.getInputStream(); // opens the input stream in order to retrieve InputStream objects
} catch (IOException e) {
}
mmInStream = tmpIn;
}
public void run() {
int bytes; // bytes returned from read()
int availableBytes = 0;
// Keep listening to the InputStream until an exception occurs
while (true) {
try {
availableBytes = mmInStream.available();
if(availableBytes>0){
byte[] buffer = new byte[availableBytes]; // buffer store for the stream
// Read from InputStream
bytes = mmInStream.read(buffer); // Get number of bytes and message in "buffer"
if (bytes>0){
h.obtainMessage(RECEIVE_MESSAGE, bytes, -1, buffer).sendToTarget(); // Send to message queue Handler
}
}
} catch (IOException e) {
break;
}
}
}
И это: (в методе onCreate ()):
mConnectedThread = new ConnectedThread(btSocket);
mConnectedThread.start();
// The Handler that gets information back
h = new Handler() { // Handler-->used to communicate b/w UI & BG Thread
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case RECEIVE_MESSAGE:// if receive message
byte[] readBuf = (byte[]) msg.obj;
String strIncom = new String(readBuf, 0, msg.arg1); // create string from bytes array
sb.append(strIncom); // append string
int endOfLineIndex = sb.indexOf("\n"); // determine the end-of-line
if (endOfLineIndex > 0) { // if end-of-line,
String sbprint = sb.substring(0, endOfLineIndex); // extract string
sb.delete(0, sb.length());// and clear
Toast.makeText(ledControl.this,sbprint,Toast.LENGTH_SHORT).show();
footSteps.setText(sbprint); // update TextView
}
break;
}}};