float y;
float z;
}acc_g_data_t;
-static uint16_t fall_counter = 0;
+uint16_t fall_counter = 0;
#if fall_detect_debug
extern int count_13 ;
extern int count_14 ;
extern int count_7 ;
#endif
int fall_detect_count = 0;
+int acc_square_14 = 0;
+double acc_square =0;
uint8_t gsensor_sc7a20_fall_detect(acc_g_data_t * acc)
{
double acc_square_t = (double)((acc->x) * (acc->x)) + (double)((acc->y) * (acc->y)) + (double)((acc->z) * (acc->z));
- double acc_square = sqrt(acc_square_t);
+ acc_square = sqrt(acc_square_t);
// if(MMIApi_IsOpenGsensorTestWin())
// {
// memcpy(&s_sc7a20_test_info, acc, sizeof(acc_g_data_t));
if(acc_square < FALL_DETECH_LOW_THRESHOLD )//7)//
{
fall_counter++;
+ }else if(acc_square >= 14)//加速
+ {
+ acc_square_14++;
}
+ //else
if(fall_detect_count >= 32*3)
+ //if(acc_square_14 == 0 || fall_detect_count >= 32*3 )
{
fall_detect_count = 0;
fall_counter = 0;
+ acc_square_14=0;
}
- if(fall_counter >= FALL_COUNTER_THRESHOLD) //10)//
+ if(fall_counter >= FALL_COUNTER_THRESHOLD && acc_square_14 >=FALL_COUNTER_THRESHOLD/2) //10)//
{
fall_counter = 0;
s_acc.y = ((float)Gsensor_y[i]/100);
s_acc.z = ((float)Gsensor_z[i]/100);
//cplog_printf("x:%d,y:%d,z:%d!!!\n",Gsensor_x[i],Gsensor_y[i],Gsensor_z[i]);
- if(gsensor_sc7a20_fall_detect(&s_acc) == 1)//跌倒报警
- {
- //cplog_printf("mmi_gsensor_sensor_fall_alarm x:%d,y:%d,z:%d!!!\n",Gsensor_x[i],Gsensor_y[i],Gsensor_z[i]);
- mmi_gsensor_sensor_fall_alarm();
- }
+ // if(gsensor_sc7a20_fall_detect(&s_acc) == 1)//跌倒报警
+ // {
+ // //cplog_printf("mmi_gsensor_sensor_fall_alarm x:%d,y:%d,z:%d!!!\n",Gsensor_x[i],Gsensor_y[i],Gsensor_z[i]);
+ // mmi_gsensor_sensor_fall_alarm();
+ // }
}
#if USE_HX3918
xMotion_Set_Raise_Parma(0);
xMotion_Control(SHAKE_X,ENABLE_X);//shake
xMotion_Control(PEDOMETER_X, ENABLE_X); //pedometer
-
+ xMotion_Set_Fall_Parma(3);//设置灵敏度,有效范围[1~5] , 默认为 3 (最灵敏);
+ xMotion_Control(FALL_X,ENABLE_X);// 打开跌倒检测算法
sedentary_control(1);//0:on 1:off 2:auto
raisehand_control(hal_xmotion_raisehand_sw_read());