안녕하세요 안드로이드를 블루투스 통신을 통해서 컴퓨터와 연결된 맥진기 제어를 하고있는 초보개발자입니다.
블루투스 통신으로 컴퓨터와 연결된 맥진기와의 통신이 가능하도록 다 만들었습니다.
하지만 문제는 연결된 맥진기에서 측정이 되면 컴퓨터에서는 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;
}