跌倒算法优化
authorp15692025051 <846603105@qq.com>
Mon, 15 Apr 2024 01:35:00 +0000 (09:35 +0800)
committerp15692025051 <846603105@qq.com>
Mon, 15 Apr 2024 01:35:00 +0000 (09:35 +0800)
2.sdk/sdk/gui/lv_drivers/indev/my_xMotion.c

index ebff112..2ec0e0c 100644 (file)
@@ -9,7 +9,7 @@
 #include "my_xMotion.h"
 #include "lv_drv_conf.h"
 #if USE_MY_XMOTION
-
+#include <math.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdbool.h>
@@ -311,25 +311,62 @@ typedef struct
     float z;
 }acc_g_data_t;
 static uint16_t fall_counter = 0;
+#if fall_detect_debug
+extern int count_13 ;
+extern int count_14 ;
+extern int count_15 ;
+extern int count_16 ;
+
+extern int count_10 ;
+extern int count_9 ;
+extern int count_8 ;
+extern int count_7 ;
+#endif
+int fall_detect_count = 0;
 uint8_t gsensor_sc7a20_fall_detect(acc_g_data_t * acc)
 {
-    double acc_square = (double)((acc->x) * (acc->x)) + (double)((acc->y) * (acc->y)) + (double)((acc->z) * (acc->z));
-
+    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);
     // if(MMIApi_IsOpenGsensorTestWin())
     // {
     //   memcpy(&s_sc7a20_test_info, acc, sizeof(acc_g_data_t));
     // }
-    //cplog_printf("acc_square:%f,%f,%f,%f\n",acc_square,acc->x,acc->y,acc->z);
-    if(acc_square < FALL_DETECH_LOW_THRESHOLD )
+
+#if fall_detect_debug    
+    if(acc_square<8)
+        count_7++; 
+    else if(acc_square>8 && acc_square<9)
+        count_8++; 
+    else if(acc_square>9 && acc_square<10)
+        count_9++; 
+    else if(acc_square>10 && acc_square<11)
+        count_10++; 
+    else if(acc_square>13 && acc_square<14)
+        count_13++;
+    else if(acc_square>14 && acc_square<15)
+        count_14++;
+    else if(acc_square>15 && acc_square<16)
+        count_15++;
+    else if(acc_square>16)
+        count_16++;    
+#endif
+    fall_detect_count++ ;
+    //cplog_printf("acc_square:% 12f,acc_square_t:% 12f,x:% 12f,y:% 12f,z:% 12f\n",
+     //               acc_square,acc_square_t,acc->x,acc->y,acc->z);
+    //cplog_printf("acc_square:% 12f,count_13:% 4d,count_10:% 4d\n",
+    //               acc_square,count_13,count_10);
+    
+    if(acc_square < FALL_DETECH_LOW_THRESHOLD )//7)// 
        {
         fall_counter++;
     }
-       else
+       if(fall_detect_count >= 32*3)
        {
+        fall_detect_count = 0;
         fall_counter = 0;
     }
 
-    if(fall_counter >= FALL_COUNTER_THRESHOLD)
+    if(fall_counter >= FALL_COUNTER_THRESHOLD) //10)//
        {
         fall_counter = 0;