2017-08-18 3 views
1

Ich versuche, Ganzzahlen 0 bis 10 von meinem Arduino Uno auf mein Android-Gerät zu senden. Der Arduino sendet die Ganzzahlen jedoch nicht separat, sondern sendet sie als Cluster (manchmal 2 gleichzeitig). Ich möchte in der Lage sein, eine ganze Zahl alle 5 Millisekunden zu senden und nicht länger als das zu verzögern. Irgendwelche Ideen?Arduino sendet keine ganzen Zahlen richtig

Arduino Code:

#include <SoftwareSerial.h> 

const int RX_PIN = 8; 
const int TX_PIN = 9; 
SoftwareSerial bluetooth(RX_PIN, TX_PIN); 
char commandChar; 

void setup(){ 
    bluetooth.begin (9600); 
    Serial.begin(9600); 
} 

void loop() { 
    if(bluetooth.available()){ 
     commandChar = bluetooth.read(); 
     switch(commandChar){ 
      case '*': 
      for(int i = 0; i < 11; i++){ 
       bluetooth.print(i); 
       delay(5); 
      } 
     break; 
     } 
    } 
} 

Android Code:

public void run() { 
    initializeConnection(); 
    byte[] buffer = new byte[256]; // buffer store for the stream 
    int bytes; // bytes returned from read() 
    while (true) { 
     try { 
      if(mmSocket!=null) { 
       bytes = mmInStream.read(buffer); 
       String readMessage = new String(buffer, 0, bytes); 
       Log.e("Received Message ", readMessage); 
       } 
      } 
     } catch (IOException e) { 
      Log.e("ERROR ", "reading from btInputStream"); 
      break; 
     } 
    } 
} 

Android Monitor/Console Ausgabe:

08-18 19:46:32.319 6720-6749/? E/Received Message: 0 
08-18 19:46:32.324 6720-6749/? E/Received Message: 1 
08-18 19:46:32.324 6720-6749/? E/Received Message: 23 
08-18 19:46:32.324 6720-6749/? E/Received Message: 4 
08-18 19:46:32.379 6720-6749/? E/Received Message: 56 
08-18 19:46:32.379 6720-6749/? E/Received Message: 78 
08-18 19:46:32.379 6720-6749/? E/Received Message: 91 
08-18 19:46:32.384 6720-6749/? E/Received Message: 0 
+0

Was ist "mmInStream" in Ihrem Android-Code? – MikeCAT

+0

mmInStream ist der Eingangsstrom der Bluetooth-Buchse zwischen dem Arduino und dem Android-Handy. –

Antwort

1

Es scheint, dass die serielle Kommunikation als Strom arbeitet (nicht Datagramm) und hält keine Datengrenze.

Daher scheint es, dass Sie Ihren sendenden Daten Datentrennzeichen (zum Beispiel: newline) hinzufügen und im Empfänger verarbeiten müssen (zum Beispiel: BufferedReader), um die Datengrenze beizubehalten.

+0

Ok, ich werde das versuchen. Vielen Dank! –

+0

@ Sam.C Sie haben mich gebeten, einen Blick darauf zu werfen, und diese Antwort ist genau richtig. GL zu deinem Projekt! –