VC下读取加速度计

利用传感器API接口读取加速度传感器数据



分为几个步骤


包含头文件和库

#include<sensorsapi.h>
#include<sensors.h>

#pragma comment(lib,"Sensorsapi.lib")


要检索传感器对象

要使用到ISensorManager接口

调用CoCreateInstance创建一个传感器管理接口

ISensorManager *mg=NULL;
HRESULT hr = CoCreateInstance(CLSID_SensorManager, 0, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&mg));


接下来再使用传感器管理接口调用GetSensorsByCategory来检索传感器

GetSensorsByCategory可以检索指定类别的传感器,这里我们使用SENSOR_CATEGORY_MOTION动作类传感器集合
ISensorCollection接口接收传感器列表

ISensorCollection *sencon=NULL;
hr = mg->GetSensorsByCategory(SENSOR_CATEGORY_MOTION, &sencon);


ISensorCollection 会获得一个集合内所有的传感器

先要用GetCount获取到集合内传感器数量,然后用一个循环获取到所有传感器

使用GetAt获取索引值内的传感器

然后就要用用到传感器接口ISensor

ISensor *sen=NULL;
sencon->GetCount(&co);
for (UINT i = 0; i < co; i++){
hr = sencon->GetAt(i, &sen);
//...
}


现在就已经获取到集合内的传感器了

但是还无法判断是否为加速度传感器

这就要通过检索传感器可提供的数据字段PROPERTYKEY

要使用到接受数据字段的IPortableDeviceKeyCollection类型

IPortableDeviceKeyCollection *portcoll=NULL;
hr = sen->GetSupportedDataFields(&portcoll);


IPortableDeviceKeyCollection类型获取到的是一个PROPERTYKEY集合,同样用循环获取到集合内的所有值

PROPERTYKEYfmtid表示传感器类型,pid表示数据类型。

加速度计的数据类型标识为 2 X轴 3 Y轴  4 Z轴

ULONG cop;
int i=0;
PROPERTYKEY acckey[3];
PROPERTYKEY pk;
hr = portcoll->GetCount(&cop);
for (UINT j = 0; j < cop; j++){
hr = portcoll->GetAt(j, &pk);
if (pk.fmtid == SENSOR_DATA_TYPE_MOTION_GUID)
{
switch (pk.pid)
{
case 2:
portcoll->GetAt(j,acckey[i]);
i++;
break;
case 3:
portcoll->GetAt(j,acckey[i]);
i++;
break;
case 4:
portcoll->GetAt(j,acckey[i]);
break;
}
}


通过acckey获取到了加速度计的xyz键值,现在就需要通过键值获取数据了。

通过传感器接口ISensorGetData读取传感器数据

传感器数据使用ISensorDataReport类型接收

然后通过ISensorDataReportGetSensorValue就能获得数据了

PROPVARIANT pv;
float x,y,z;
hr = sen->GetData(&sendat);
sendat->GetSensorValue(acckey[0],&pv);
x=(float)pv.date;
sendat->GetSensorValue(acckey[1],&pv);
y=(float)pv.date;
sendat->GetSensorValue(acckey[2],&pv);
z=(float)pv.date;


这样就完成了基本的数据获取。





最后上传一个可以运行的demo(vs2013)

http://download.csdn.net/detail/keymove/8424253




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值