2016-04-19 13 views
0

Ich versuche Float-Daten von Arduino HC-05 an Android zu senden. Mein Android-Code, Daten zu empfangen istWas ist die richtige Art, Daten von Arduino HC-05 Bluetooth an Android zu senden?

byte buffer[]; 
      buffer = new byte[2048]; 
      int bytes = dataInputStream.read(buffer); 
      if(bytes > 0) { 
       String message = new String(buffer, 0, bytes); 
       Log.i(TAG, "listen: " + message); 
      } 

Ich kann den Byte-Puffer analysieren zurück zu schwimmen. Ich habe versucht zu googeln, aber keine Hilfe. Kann mir jemand sagen, was mache ich falsch?

Die Zeichenfolge, die ich danach bekomme, sind einige unbekannte Zeichen mit Fragezeichen.

Unten in meinem Aurdino Code:

double duration, distance,FrontSensor,LeftSensor; 

Leere Schleife() {

SonarSensor(trigPinFront, echoPinFront); 
FrontSensor = distance; 
if(FrontSensor > 30) { 
    FrontSensor = FrontSensor/30; 
    BTserial.write(FrontSensor); 
Serial.println(FrontSensor); 
} 
delay(1000); 

}

Der Ausgang I erhalten ist: Output I get

Antwort

0

Ich würde verwenden der folgende Code stattdessen:

//create new class for connect thread 
    private class ConnectedThread extends Thread { 
     private final InputStream mmInStream; 
     private final OutputStream mmOutStream; 


    //creation of the connect thread 
    public ConnectedThread(BluetoothSocket socket) { 
     InputStream tmpIn = null; 
     OutputStream tmpOut = null; 

     try { 
      //Create I/O streams for connection 
      tmpIn = socket.getInputStream(); 
      tmpOut = socket.getOutputStream(); 
     } catch (IOException e) { } 

     mmInStream = tmpIn; 
     mmOutStream = tmpOut; 
    } 

    public void run() { 
     byte[] buffer = new byte[256]; 
     int bytes; 

     // Keep looping to listen for received messages 
     while (true) { 
      try { 
       bytes = mmInStream.read(buffer);   //read bytes from input buffer 
       String readMessage = new String(buffer, 0, bytes); 
       // Send the obtained bytes to the UI Activity via handler 
       bluetoothIn.obtainMessage(handlerState, bytes, -1, readMessage).sendToTarget(); 
      } catch (IOException e) { 
       break; 
      } 
     } 
    } 
    //write method 
    public void write(String input) { 
     byte[] msgBuffer = input.getBytes();   //converts entered String into bytes 
     try { 
      mmOutStream.write(msgBuffer);    //write bytes over BT connection via outstream 
     } catch (IOException e) { 
      //if you cannot write, close the application 
      Toast.makeText(getBaseContext(), "Connection Failure", Toast.LENGTH_LONG).show(); 
      finish(); 

      } 
     } 
    } 

Dies funktioniert für mich, um Bluetooth-Informationen von einem Arduino zu bekommen! :)

EDIT: Um die Werte von doubleto Zeichenfolge in Arduino Verwendung zu konvertieren:

dtostrf(floatVar, minStringWidthIncDecimalPoint, numVarsAfterDecimal, charBuf);

+0

Ich versuche, den Gleitkommawert aus dem Puffer zu erhalten, der unter Verwendung des Eingabestroms gelesen wird. Ich bekomme die String-Eingabe korrekt. aber wenn ich Float - oder Integer - Daten sende, wird es in ein paar zufällige Zeichen mit Fragezeichen umgewandelt. – vipulsodha

+0

Ich benutze auch Floats und Integratoren, und mit dem Code, bevor ich die richtigen Variablen bekommen kann, ist es seltsam – Alvaro

+0

Ich habe das Bild von der hinzugefügt Ausgabe. – vipulsodha

0

Dies könnte hilfreich sein.

int charsRead = 0; 
char[] buffer = new char[BUFFER_SIZE]; 
while (mRun) 
{ 
    charsRead = in.read(buffer); 
    serverMessage = new String(buffer).substring(0, charsRead); 
     if (serverMessage != null && mMessageListener != null) { 
      Log.e("RESPONSE FROM SERVER", "S: Received Message: '" + serverMessage + "'"); 
     } 
    serverMessage = null; 
} 
+0

funktioniert nicht. Seltsame Leistung, die ich bekomme. – vipulsodha

+0

Können Sie mir bitte die Ausgabe zeigen? –

+0

http://i.stack.imgur.com/5szPn.png – vipulsodha

Verwandte Themen