2012-04-12 7 views
6

La mia applicazione Android sta ricevendo dati da Polar Heart Rate Monitor tramite la connessione Bluetooth. Il mio problema è che sto ricevendo una tale stringa: Come ottenere i valori corretti dal cardiofrequenziometro Polar

il mio codice per ottenere i dati:

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(); 

ho provato a cambiare questa linea in alcuni modi, ma sto ancora ricevendo dati errati:

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

Come posso risolvere questo problema?

Si prega di aiutare !!!

+1

Hai guardato i valori di byte non elaborati e non come stringa sottoposta a rendering? –

+1

sembra che i tuoi personaggi siano al di sopra dell'intervallo stampabile. Dovresti considerarli come numeri interi piuttosto che come caratteri e vedere se ciò ha più senso. – twain249

+0

@erni come hai risolto il problema? – Hunt

risposta

4

Il sensore non fornisce stringhe stampabili (come ad esempio NMEA) ma i dati binari che è necessario analizzare. Puoi dare un'occhiata allo MyTracks Polar Sensor data parser per l'ispirazione.

Si sta utilizzando available e read in modo errato (ma il modo in cui si utilizza potrebbe avere fortuna la maggior parte del tempo).

+0

Grazie per l'aiuto ho esaminato il parser di dati Polar Sensor di My tracks e mi ha aiutato molto. Non capisco cosa c'è di sbagliato nella disponibilità e nella lettura del mio codice? Sarebbe bello se tu potessi spiegarmelo o dire cosa dovrei cambiare lì. Thx – erni

+0

'read' restituisce il numero di byte letti. Stai ignorando il valore di ritorno. Stai solo leggendo il numero di byte che sono stati resi disponibili, non il numero di byte che possono essere letti. –

+0

... c'è un modo standard per leggere il buffer oltre a questi dati del sensore polare? come sto provando il parser dei messaggi polari sul mio monitor della frequenza cardiaca, ma non funziona – Hunt

0

le unità di misura (basato su Raspberry Pi Challenge a JavaOne) mostra progetto, come questo può essere analizzato in un typesafe Heartbeat Unità per la visualizzazione o trasferimento in altri sistemi.

Problemi correlati