안녕하세요 안드로이드를 블루투스 통신을 통해서 컴퓨터와 연결된 맥진기 제어를 하고있는 초보개발자입니다.

 

블루투스 통신으로 컴퓨터와 연결된 맥진기와의 통신이 가능하도록 다 만들었습니다.

 

하지만 문제는 연결된 맥진기에서 측정이 되면 컴퓨터에서는 labview라는 프로그램을 통해 파형이 측정되는 동안

 

파형그래프가 실시간으로 출력이 되는데요. 그것을 블루투스 시리얼통신을 통해 앱으로 전달할려고하는데

 

여태까지 한 결과로는 파형이 그려지지 않고 실시간으로 그냥 대각선이 그어집니다.

 

labview에서 전달되는 데이터를 double형에 맞춰서 16바이트씩 자르고, 변환까지햇는데요 왜 그런지 감도 안잡히고

 

이유도 모르겠습니다. 소스첨가하겠습니다 가르쳐주시면 감사하겠습니다.

 

--------------------------------------------------------------------------------------그리는 부분

  public void drawGraph(byte[] data) {
   ByteBuffer buf2 = ByteBuffer.wrap(data);
   double[] doubles = new double[ data.length / 8];
   for (int k = 0; k < doubles.length; k++){
    doubles [k] = buf2.getDouble(k*8);   
    Log.d("DEBUG" , "doubles1111->" + doubles);
     int dataSize = doubles.length;
     Log.d("DEBUG" , "datasize1111->" + dataSize);
     int[] mtempYpos = new int[dataSize];
     for (int i = 0; i < dataSize; i++) {
      mtempYpos[i] = (int) doubles[k];
      Log.d("수신데이타1~100","수신데이타= "+doubles[i]);

      }
      synchronized (this) {
       if (mBitmap != null) {
        Canvas canvas = mCanvas;
        Paint paint = mPaint;

        float deltaX = mSpeed;
        float newX = mLastX + deltaX;

        paint.setColor(Color.RED);
        
        for (int i = 0; i < dataSize; i++) {
         float v = (int) (300 - mtempYpos[i]*0.1f);
         Log.d("그릴데이타1~100","그릴데이타= "+mtempYpos[i]);
       canvas.drawLine(mLastX, mLastValues, newX, v, paint);
         mLastValues = mtempYpos[i];
         newX = mLastX + deltaX;
         Log.d("X축 인덱스","newX = " + newX);
        }
        mLastX += mSpeed;
        postInvalidate();
      }
     }
    }

}

 

--------------------------------------------------------------------------------Connected Thread에 run() 부분

        public void run() {
            Log.i(TAG, "BEGIN mConnectedThread");
            byte[] buffer = new byte [128];
            Log.d(TAG,"buffer111 ->" + buffer);
            int bytes;

            //연결되는 동안 inputStream 데이터를 기다린다는 부분
            while (true) {
                try {
                 //inputStream으로부터 읽는 부분
                    bytes = mmInStream.read(buffer);
                    Log.d(TAG, "bytes1111: " + bytes);
                    //얻은 데이터를 엑티비티로 보내는 부분
                     mGraphView.data = buffer;
                     mGraphView.drawGraph(buffer);
                    //mHandler.obtainMessage(Main.MESSAGE_READ, bytes, -1, buffer).sendToTarget();

                } catch (IOException e) {
                    Log.e(TAG, "disconnected", e);
                    connectionLost();
                    break;
                }
            }
        }

 

-------------------------------------------------------------------------치환부분 및 버튼클릭했을 경우 실제로 그려주는 부분

          if(mConnection.getState() != BluetoothConnection.STATE_CONNECTED) {
           Toast.makeText(getApplicationContext(), "아직 정보가 들어오지 않았습니다.", Toast.LENGTH_SHORT).show(); 
          }
          else{
           int x;
           byte [] data=mGraphView.data;
           for(x=0; x<data.length; x++)
              {
           double fval = UByte(data[x]);
           Log.e("DEBUG" , "fval11->" + fval);
           mGraphView.drawGraph(fval);
              }
          }
          break;
     }
    }
};

private double UByte(byte b){
 if(b<0) // if negative
  return (double)( (b&0x7F) + 128 );
 else
  return (double)b;
 }