TI中文支持网
TI专业的中文技术问题搜集分享网站

android app连接keyfob读取同时读取多个characteristic值的问题

想让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的值,这又是怎么回事呢?

Yan:

Ss,

恩,,,

第一,你试过用TI 的 BLE Device Monitor这个PC 工具能读到这三轴的数据吗?看看服务是否都正常。

第二,我建议你试一下等收到比如说X 的Android的 onCharacteristicsRead ()之后,再发送Y 的读请求,这样试试看行不行。

Ss Zh:

回复 Yan:

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 Zh:

回复 Yan:

Yan,

我现在还有几个问题:

1.我每次向keyfob写入数据的时候,第一次写入成功后八成会断开连接,然后还得手动重连

2.我试了下每隔一定时间获取x轴加速度值,我发现数据更新特别慢,1.5秒到2秒才能更新一次,这是连接的问题还是android程序的问题?

3.在获取xyz三轴数据的时候,我发现程序run的模式下只能获取x轴的,而debug模式下设几个断点,就可以得到三轴的数据,这又是为什么呢?我感觉应该跟第二个问题有些关系,是不是什么被阻塞了?

Yan:

回复 Ss Zh:

Ss,

关于xyz 三轴,我有个问题,你为什么要手机去读keyfob呢?

keyfob代码里面是一次性读取xyz 三轴数据,然后以notification的方式主动发送给手机的,这样没延迟。。。

1. 你向keyfob 写了啥数据呢?

Ss Zh:

回复 Yan:

Yan,

手机去读keyfob么,项目需要。。

我看keyfob开发手册4.6节“ Using the Accelerometer Service"里说ACCEL_X(Y\Z)_UUID有不同的UUID,再结合android的例子程序BluetoothLeGatt,我以为就只能通过分别度这三个characteristic来得到value,可是这么做以后就像我前面说的出现各种问题。写数据主要是控制accelEnable的情况,写”01“让keyfob的accelerometer开始发数据。

我怎样才能在手机端一次性读取xyz三轴数据而没延迟呢?

da qin zheng sheng:

回复 Ss Zh:

有难度,用的啥型号手机?通信协议或者不完全一致?

Ss Zh:

回复 da qin zheng sheng:

用的小辣椒3S,使用BTool的时候是实时更新的,不明白手机怎么就这么多问题,还是就这手机有这么多问题。。

Yan:

回复 Ss Zh:

Ss,

打开overlap试一下,然后代码里面连续发送三个轴的读请求看看,比如

{

read(x);

read(y);

read(z);

}

overlap的指导:http://processors.wiki.ti.com/index.php/OverlappedProcessing

赞(0)
未经允许不得转载:TI中文支持网 » android app连接keyfob读取同时读取多个characteristic值的问题
分享到: 更多 (0)