private BluetoothAdapter.LeScanCallback leScanCallback = new BluetoothAdapter.LeScanCallback() { @Override public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) { // final float x = 360 - (getShort(scanRecord,2) + 10000) /20000.00f * 360; // final float y =360 - (getShort(scanRecord,4) ) / 100.00f; // final float z =360 - (getShort(scanRecord,6) + 10000) /20000.00f * 360; //读取数据标识,因为没有使用CRC校验,防止受其它蓝牙数据影响 //当str为“airdrum”时认为数据有校 String s = new String(Arrays.copyOfRange(scanRecord, 2+6+6,2+6+6+7)); if(!s.equals("airdrum")) { return; } //获得鼓棒ID Long drumId = getLong(scanRecord,2); //不包含这个ID的大鼓棒就添加它 if(!drumIds.contains((drumId))) { drumIds.add(drumId); } final float count = getShort(scanRecord, 6+2); final float r2 = 180 + getShort(scanRecord, 6+4) / 100.00f;//r2的范围是-180~+180 加180后得到0~360数据 final float r0 = getUShort(scanRecord, 6+6) / 100.00f;//r0的范围是0~360 System.out.println("r2:\t"+ r2+"\tr0:\t"+ r0 + "\tangle:" + getAngle(r0,firstR0)+"\tfirstr0:"+getAngle(r0,firstR0)+90); if (count > oldCount) { //第一次落棒 if (first) { first = false; //第一次落棒时保存第一次落棒的位置 firstR2 = r2; firstR0 = r0; sp.play(start, 1.0f, 0.3f, 0, 0, 1.0f); } else { float angleR0 = getMinAngle(r0,firstR0); float angleR2 = getMinAngle(r2,firstR2); //右鼓 if (angleR0 > 15) { //上 if (angleR2 > 25) { sp.play(closehh, 1.0f, 0.3f, 0, 0, 1.0f); } else {//下 sp.play(snare, 1.0f, 0.3f, 0, 0, 1.0f); } } else if (angleR0 < -15) {//左鼓 //上 if (angleR2 > 25) { sp.play(closehh, 1.0f, 0.3f, 0, 0, 1.0f); } else {//下 sp.play(snare, 1.0f, 0.3f, 0, 0, 1.0f); } } else {//中鼓 //上 if (angleR2 > 25) { sp.play(openhh, 1.0f, 0.3f, 0, 0, 1.0f); } else {//下 sp.play(kick, 1.0f, 0.3f, 0, 0, 1.0f); } } } } oldCount = count; final float angleZ = getAngle(r0,firstR0)+90;; float z = angleZ > 360 ? angleZ - 360:angleZ; final float angleY = z > 180 ? r2:-r2; if (Looper.myLooper() == Looper.getMainLooper()) { if (DEBUG) { final String str = String.format("%.2f %.2f %.2f", count, r2, r0); textView1.setText(str); } else { mGLSurfaceView.setXYZ(0,0,angleY , angleZ); } } else { runOnUiThread(new Runnable() { @Override public void run() { if (DEBUG) { final String str = String.format("%.2f %.2f %.2f", count, r2, r0); textView1.setText(str); } else { mGLSurfaceView.setXYZ(0,0, angleY,angleZ); } } }); } } }; |