资源简介
基于mpu6050计步器代码,stm32和51都能使用的的计步器代码
代码片段和文件信息
#define P_P_DIFF 1000 /* 波峰-波谷的差值,即3D阈值 */
#define RISING_EDGE 1 /* 上升沿状态 */
#define FALLING_EDGE 0 /* 下降沿状态 */
#define FAST_WALK_TIME_LIMIT_MS 200 /* ms */
#define SLOW_WALK_TIME_LIMIT_MS 10000 /* 10s 内没有走一步 结束计步 */
#define STEP_OK 7 /* 7步法则 */
unsigned int lastPos = 0; /* 旧数据 */
unsigned int newMax = 0 newMin = 0; /* 波峰-波谷 */
bool walkSta = FALSE; /* 获得一次峰值状态 */
bool walkOkSta = FALSE; /* 连续10s内走了7步 有效行走状态 */
bool pSta = RISING_EDGE; /* 3D数据波形状态 */
long lastTime = 0; /* 上一次 walkSta 的时间 */
unsigned char stepOK = 0; /* 初始计步门限 滤除干扰 */
unsigned long stepCount = 0; /* 步数值 */
/*****************************************************************
** input: 3 axis or angle
** output: step count
** user read:
3 axis is filter value.
******************************************************************/
unsigned long Step_Count(float axis0 float axis1 float axis2){
unsigned int nowPos = 0;
int ppDiff = 0;
int timeDiff = 0;
/* 获取3D IMU */
nowPos = (unsigned int)powf(sqrtf(axis0) + sqrtf(axis1) + sqrtf(axis2) 0.5);
/* 得到波峰和波谷 */
if((pSta==RISING_EDGE) && (nowPos<=lastPos)){
pSta = FALLING_EDGE;
newMax = lastPos;
walkSta = TRUE;
}
else if((pSta==FALLING_EDGE) && (nowPos>lastPos)){
pSta = FALLING_EDGE;
newMin = lastPos;
walkSta = TRUE;
}
else{
walkSta = FALSE;
}
/* 更新3D step状态数据 */
lastPos = nowPos;
/* 有波峰或波谷 */
if(walkSta==TRUE){
walkSta = FALSE;
ppDiff = newMax - newMin; /* 波峰与波谷的差值 */
if(ppDiff > P_P_DIFF){
timeDiff = GetTime() - lastTime; /* 获取波峰和波谷的时间差 */
if(timeDiff < FAST_WALK_TIME_LIMIT_MS){ /* 波峰波谷时间差小于200ms的直接去掉 */
return stepCount;
}
else if(timeDiff > SLOW_WALK_TIME_LIMIT_MS){ /* 波峰波谷时间差大于10s的视为静止 */
walkOkSta = FALSE;
stepOK = 0;
return stepCount;
}
stepOK++;
if(stepOK>=STEP_OK){ /* 走7步之后更新状态 */
walkOkSta = TRUE;
}
lastTime = GetTime(); /* 更新时间 */
}
}
if(walkOkSta==TRUE){ /* 满足10s内走7步 */
stepCount += stepOK;
stepOK = 0;
}
return stepCount;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2238 2018-03-23 19:09 mpu6050.c
----------- --------- ---------- ----- ----
2238 1
评论
共有 条评论