我在做一个关于andriod加速度传感器的数据读取应用 5

我想把传感器读取的xyz三轴上获取的加速度值随着时间的递增存在一个长度为24的静态数组中,请问怎么做?... 我想把传感器读取的xyz三轴上获取的加速度值随着时间的递增存在一个长度为 24的静态数组中,请问怎么做? 展开
 我来答
山水阿锐
2015-04-03 · TA获得超过34.3万个赞
知道顶级答主
回答量:23.7万
采纳率:91%
帮助的人:3.2亿
展开全部
您好,在 HAL
文件中,会有一组宏定义,用于把从传感器中读取的加速度数据转换为标准单位(m/s2)。如以下代码:

// conversion of
acceleration data to SI units (m/s^2)
#define CONVERT_A (GRAVITY_EARTH /
LSG)
#define CONVERT_A_X (-CONVERT_A)
#define CONVERT_A_Y (CONVERT_A)

#define CONVERT_A_Z (CONVERT_A)

在这个宏定义中,常量GRAVITY_EARTH
是一个标准重力加速度值,即9.81m/s2,LSG为一个重力加速度值的最小有效计数值,例如,MMA8452
在正常模式下的读数为1024。因此,CONVERT_A 用于把从加速度传感器中读取的数据,从数字读数转换为标准重力加速度单位。

通过分别修改CONVERT_A_X、CONVERT_A_Y 和CONVERT_A_Z,我们可以轻松地改变X、Y 和Z
轴的方向。如果该轴的方向与系统定义相反,可以使用(-CONVERT_A)来改变其方向。如果方向一致,就使用(CONVERT_A),则保持方向不变。

这个宏定义位于FSL Android 9 (Android 2.2)驱动程序的HAL文件sensor.c 中。对于FSLAndroid 10
(Android 2.3),您可以在’libsensors’文件夹的HAL 文件Sensor.h 中找到它。

在 Android 2.2 HAL
文件中交换X 轴和Y 轴

在某些情况下,X 和Y 轴必须进行交换,以便使传感器数据的坐标与系统坐标保持一致。

对于 FSL
Android 9 (Android 2.2)驱动程序来说,X 轴和Y 轴的交换非常简单。首先,在HAL 文件sensor.c
中,在函数sensor_poll() 中找到以下代码:

switch (event.code) {
case ABS_X:

sSensors.acceleration.x = event.value * CONVERT_A_X;
break;
case
ABS_Y:
sSensors.acceleration.y = event.value * CONVERT_A_Y;
break;

case ABS_Z:
sSensors.acceleration.z = event.value * CONVERT_A_Z;

break;
}

然后,根据如下所示修改代码:

switch (event.code) {
case
ABS_X:
sSensors.acceleration.y = event.value * CONVERT_A_Y;
break;

case ABS_Y:
sSensors.acceleration.x = event.value * CONVERT_A_X;

break;
case ABS_Z:
sSensors.acceleration.z = event.value *
CONVERT_A_Z;
break;
}

在 Android 2.3 的HAL 文件中交换X 轴和Y 轴


Android 2.3 的HAL 文件中交换X 轴和Y 轴会更加复杂些,因为它具有更复杂的HAL文件结构。所有HAL
文件都位于文件夹‘libsensors’中。文件AccelSensor.cpp 中的两个函数需要修改。

首先,修改函数AccelSensor()的代码,如下所示:

if
(accel_is_sensor_enabled(SENSOR_TYPE_ACCELEROMETER)) {
mEnabled |=
1<<accelerometer; if (!ioctl(data_fd, EVIOCGABS(EVENT_TYPE_ACCEL_X),
&absinfo)) {
mPendingEvents[Accelerometer].acceleration.y =
absinfo.value * CONVERT_A_Y;
}
if (!ioctl(data_fd,
EVIOCGABS(EVENT_TYPE_ACCEL_Y), &absinfo)) {

mPendingEvents[Accelerometer].acceleration.x = absinfo.value * CONVERT_A_X;

}
if (!ioctl(data_fd, EVIOCGABS(EVENT_TYPE_ACCEL_Z), &absinfo)) {

mPendingEvents[Accelerometer].acceleration.z = absinfo.value * CONVERT_A_Z;

}
}

然后,修改函数processEvent()的代码,如下所示:

void
AccelSensor::processEvent(int code, int value)
{
switch (code) {

case EVENT_TYPE_ACCEL_X:
mPendingMask |= 1<<accelerometer; mPendingEvents[Accelerometer].acceleration.y = value * CONVERT_A_Y;
break;

case EVENT_TYPE_ACCEL_Y:
mPendingMask |= 1<<accelerometer; mPendingEvents[Accelerometer].acceleration.x = value * CONVERT_A_X;
break;

case EVENT_TYPE_ACCEL_Z:
mPendingMask |= 1<<accelerometer; mPendingEvents[Accelerometer].acceleration.z = value * CONVERT_A_Z;
break;

}
}

完成后,X 轴和Y 轴的数据就互相交换了。
追问
怎么样将加速度传感器的加速度 存进静态数组
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式