实验 2:跌落检测
记录跌落的 g 数据,然后进行跌落测试查看数据的变化
查看数据
软件我使用 VOFA+上位机,然后进行对数据的查看发现,跌落数据大概在 0.4g 左右,所以在读取数据之后做个判断即可
代码逻辑
创建一个 30 的数组,进行 fifo 的数据吞吐,查看数据之后遍历所有的数据,先最小小于 0.4g,然后最大大于 1.9g 即可算做跌落
float num[30] = {0};
float max = -9999.0f;
float min = 9999.0f;
while (1)
{
if(adxl362_readflag == 1)
{
adxl362_GetData(&Xdata, &Ydata, &Zdata, &Tdata);
float all_data = sqrtf((float)(Xdata*Xdata + Ydata*Ydata + Zdata*Zdata));
all_data /= 1000;
if(all_data)
{
memmove(&num[0], &num[1], sizeof(float)*29); // 将前29个元素向前移动
num[29] = all_data;
for(int i=0; i<=29; i++)
{
max = fmaxf(max, num[i]);
min = fminf(min, num[i]);
}
}
if(max>= 1.8 && min <= 0.5) // 简单的震动检测阈值
{
PRINTF("Vibration detected! Accel: %f g (max: %f, min: %f)\r\n", all_data, max, min);
memset(num, 0, sizeof(num)); // 震动检测后重置数据
}
else
{
PRINTF("Stable. Accel: %f g\r\n", all_data);
}
max = -9999.0f;
min = 9999.0f;
adxl362_readflag = 0;
}
}
结果显示
总结
问题 1:一开始没进行数据清除会有很多误判断问题,需要进行 memset 操作

