2012-04-12 8 views
6

Meine Android-Anwendung erhält Daten von Polar Heart Rate Monitor über Bluetooth-Verbindung. Mein Problem ist, dass ich eine solche Zeichenfolge bekomme: So erhalten Sie die richtigen Werte von Polar Pulsmesser

Mein Code, um die Daten für immer:

final Handler handler = new Handler(); 
    final byte delimiter = 10; //This is the ASCII code for a newline character 

    stopWorker = false; 
    readBufferPosition = 0; 
    readBuffer = new byte[1024]; 
    workerThread = new Thread(new Runnable() 
    { 
     public void run() 
     { 
      while(!Thread.currentThread().isInterrupted() && !stopWorker) 
      { 
       try 
       { 
        int bytesAvailable = mmInputStream.available(); 
        if(bytesAvailable > 0) 
        { 
         byte[] packetBytes = new byte[bytesAvailable]; 
         mmInputStream.read(packetBytes); 
         for(int i=0;i<bytesAvailable;i++) 
         { 
          byte b = packetBytes[i]; 
          if(b == delimiter) 
          { 
           byte[] encodedBytes = new byte[readBufferPosition]; 
           // System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length); 
           final String data = new String(encodedBytes, "ASCII"); 

           readBufferPosition = 0; 

           handler.post(new Runnable() 
           { 
            public void run() 
            { 
             pulsText.setText(data); 
            } 
           }); 
          } 
          else 
          { 
           readBuffer[readBufferPosition++] = b; 
          } 
         } 
        } 
       } 
       catch (IOException ex) 
       { 
        stopWorker = true; 
       } 
      } 
     } 
    }); 

    workerThread.start(); 

ich habe versucht, diese Zeile in wenigen Möglichkeiten zu ändern, aber ich bin immer noch falsche Daten bekommen:

final String data = new String(encodedBytes, "ASCII"); 

Wie kann ich dieses Problem lösen?

Bitte helfen Sie !!!

+1

Haben Sie sich die Rohbyte-Werte angesehen, und nicht als eine gerenderte Zeichenkette? –

+1

Es sieht so aus, als ob deine Charaktere über dem druckbaren Bereich liegen. Sie sollten sie als ganze Zahlen und nicht als Zeichen betrachten und sehen, ob das sinnvoller ist. – twain249

+0

@erni Wie hast du das Problem gelöst? – Hunt

Antwort

4

Der Sensor gibt Ihnen keine druckbaren Zeichenfolgen (wie z. B. NMEA), sondern binäre Daten, die Sie analysieren müssen. Sie können in die MyTracks Polar Sensor data parser für Inspiration schauen.

Sie verwenden available und read falsch (aber die Art, wie Sie Sie verwenden, könnte meistens Glück haben).

+0

Danke für die Hilfe Ich schaute in den Polar-Sensor-Datenparser My Tracks und es hat mir sehr geholfen. Ich verstehe nicht, was falsch ist mit verfügbaren und in meinem Code lesen? Es wäre schön, wenn du es mir erklären oder mir sagen könntest, was ich dort ändern soll. Thx – erni

+0

'read' gibt die Anzahl der gelesenen Bytes zurück. Sie ignorieren den Rückgabewert. Sie lesen nur die Anzahl der verfügbaren Bytes, nicht die Anzahl der Bytes, die gelesen werden konnten. –

+0

@his gibt es irgendeine Standardmethode, um den Puffer andere als diese polaren Sensordaten zu lesen? wie ich versuche, polar message parser auf meinem Herzfrequenz-Monitor, aber es funktioniert nicht – Hunt

0

Die Maßeinheit (basierend auf Raspberry Pi Challenge at JavaOne) Projekt zeigt, wie sich dies in eine typsichere Herzschlag Einheit zur Anzeige oder Übertragung auf andere Systeme analysiert werden.

Verwandte Themen