This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
想让android app读到keyfob三轴加速度的值,但现在在手机端添加readCharacteristic的代码,只能获得一个最上面一个characteristic的值,即:把下面的换一下顺序,Y在最上,那只能读到Y轴的值,怎么才能同时读到X、Y、Z这三个characteristic的值?
mBluetoothLeService.readCharacteristic(mAccelXCharacteristic);
mBluetoothLeService.readCharacteristic(mAccelYCharacteristic);
mBluetoothLeService.readCharacteristic(mAccelZCharacteristic);
另外,我有尝试让程序获得这个加速度service的所有characteristic的值,有时候能得到ffa1和ffa3的值,又时候仅能获得ffa3的值,这又是怎么回事呢?
Ss,
恩,,,
第一,你试过用TI 的 BLE Device Monitor这个PC 工具能读到这三轴的数据吗?看看服务是否都正常。
第二,我建议你试一下等收到比如说X 的Android的 onCharacteristicsRead ()之后,再发送Y 的读请求,这样试试看行不行。
Yan,
用BTool可以同时读到三轴值,服务应该是没问题的
对于建议二,我试了下,除非在两个之间加一条等待语句Thread.sleep(2000);才可以,而且时间小了,像1s也还是不行,但是这样的话就不是同一时刻的xyz值了呀
以下是我试着改的BluetoothLeService里的broadcastUpdate,目的是得到accelerometer这个server所有characteristic的value,放在字符串myStr里,可是假如我在DeviceControlActivity里给的语句是mBluetoothLeService.readCharacteristic(mAccelXCharacteristic);,那么下面这个循环虽然能得到5个characteristic,但只能得到x的value,其他的都是null,这是为什么呢?
private void broadcastUpdate(final String action, final BluetoothGattCharacteristic charc){ final Intent intent = new Intent(action); List<BluetoothGattCharacteristic> characteristics = charc.getService().getCharacteristics(); StringBuilder myStr = new StringBuilder(); //writes the data formatted in HEX. for(BluetoothGattCharacteristic characteristic:characteristics){ final byte[] data = characteristic.getValue(); if (data != null && data.length > 0) { final StringBuilder stringBuilder = new StringBuilder(data.length); for(byte byteChar : data) stringBuilder.append(String.format("%02X ", byteChar)); String s = characteristic.getUuid().toString(); myStr.append(s.substring(6, 8) + ":" + stringBuilder.toString()); } } intent.putExtra(EXTRA_DATA, myStr.toString()); sendBroadcast(intent); }
Ss,
关于xyz 三轴,我有个问题,你为什么要手机去读keyfob呢?
keyfob代码里面是一次性读取xyz 三轴数据,然后以notification的方式主动发送给手机的,这样没延迟。。。
1. 你向keyfob 写了啥数据呢?
Yan,
手机去读keyfob么,项目需要。。
我看keyfob开发手册4.6节“ Using the Accelerometer Service"里说ACCEL_X(Y\Z)_UUID有不同的UUID,再结合android的例子程序BluetoothLeGatt,我以为就只能通过分别度这三个characteristic来得到value,可是这么做以后就像我前面说的出现各种问题。写数据主要是控制accelEnable的情况,写”01“让keyfob的accelerometer开始发数据。
我怎样才能在手机端一次性读取xyz三轴数据而没延迟呢?
Ss,
打开overlap试一下,然后代码里面连续发送三个轴的读请求看看,比如
{
read(x);
read(y);
read(z);
}
overlap的指导:http://processors.wiki.ti.com/index.php/OverlappedProcessing