From 57b984b8395bb30b2d170369c75f19722502b104 Mon Sep 17 00:00:00 2001
From: zhangbo <zhangbo@qq.com>
Date: 星期一, 21 四月 2025 16:38:37 +0800
Subject: [PATCH] 新增加速度计步数检测功能,3s发一次数据和停止30秒1分钟发一次数据

---
 keil/include/main/main.c |  178 +++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 124 insertions(+), 54 deletions(-)

diff --git a/keil/include/main/main.c b/keil/include/main/main.c
index 0908493..35b8629 100644
--- a/keil/include/main/main.c
+++ b/keil/include/main/main.c
@@ -94,6 +94,10 @@
 
 
 /****************************************************************引脚宏定义**************************************************/
+#define UWB_OPEN_COUNT 1
+#define UWB_MEASUREMENT_INTERVAL 3
+#define UWB_MEASUREMENT_INTERVAL_SLEEP 60
+
 void test_Delay_us(uint16_t time);
 void Lora_UploadHeartBeartPoll(void);
 extern uint8_t mUsartReceivePack[100];
@@ -297,42 +301,50 @@
         }
 
     }
-    HIDO_TimerTick();
+//    HIDO_TimerTick();
 
 }
+// 定义状态
+typedef enum {
+    STATE_NORMAL,    // 正常状态,3秒测距上传一次
+    STATE_SLEEP      // 休眠状态,1分钟测距上传一次
+} CountState_t;
+// 全局变量
+uint32_t uwb_time_count = 0;  // 定时器计数值
+uint32_t step_count = 0;      // 步数计数
+uint32_t last_step_count = 0; // 上一次步数
+CountState_t current_state = STATE_NORMAL; // 当前状态
+uint32_t state_start_time = 0; // 状态开始时间
+
 uint8_t  stationary_flag;
-uint8_t flag_sleeptimer,flag_secondtask,secondtask_count;
-uint8_t  lora_wg_up=0;
 extern uint8_t lora_tx_flag;
+extern uint16_t sleep_time;
 static void sleep_timer_callback(void *dev, uint32_t time)
 {
-
 	
-    g_start_send_flag=1;
-//	  HIDO_TimerGetTick();
+//    g_start_send_flag=1;
 	  HIDO_TimerTick();
-	//		#ifdef DEBUG_BOXING
-////		gpio_pin_clr(IO_PIN_5);//测试
-	//	gpio_pin_set(IO_PIN_5);//测试
-	  // lora_wg_up=1;
-	   
-	   lora_tx_flag++;
-//	   lora_qiehuan++;
-//    IO_control_init();
-//    UWBPoll();
-//    
-//    
-//    MotorPoll();
-
-//    if(secondtask_count++%2==0)
-//    {
-//        flag_secondtask = 1;
-//    }else{
-//        flag_secondtask = 0;
-//    }
-
-//    flag_sleeptimer = 1;
-
+//	  lora_tx_flag++;
+	  uwb_time_count++;
+	  if(uwb_time_count>10000)
+		{
+		 uwb_time_count=0;
+		}
+		if (current_state == STATE_NORMAL)
+	  {
+       sleep_time++;
+		}
+		step_count = mir3da_get_step(); // 获取步数
+//		if(yundong_bushu<mir3da_get_step())
+//		{
+//			yundong_bushu=mir3da_get_step();
+//			onemin_onesecond_flag=1;
+//		}
+//		else
+//		{
+//			yundong_bushu=mir3da_get_step();
+//			onemin_onesecond_flag=0;
+//		}
     //马达震动逻辑
     if(g_com_map[MOTOR_ENABLE])
     {
@@ -350,23 +362,37 @@
     }else{
         motor_power_state=1;
     }
- 
-    //GPS工作逻辑
-		if(nomove_count++>g_com_map[STATIONARY_TIME])
-    {
-     stationary_flag = 1;
-    } else 
-		{
-     stationary_flag = 0;
-    }
     nomove_count++;
-		#ifdef DEBUG_BOXING
-//		gpio_pin_clr(BOXING_PIN);//测试
-		gpio_pin_set(BOXING_PIN);//测试
-		#endif
-		delay_us(1000);
-}
 
+		
+}
+uint16_t sleep_time=0;
+void check_step_and_update_state(void)
+{
+    if ((step_count != last_step_count))
+		{
+        // 步数有变化,重置状态为正常状态
+			if(current_state == STATE_SLEEP)
+			{
+				state_start_time = uwb_time_count;
+			}
+        current_state = STATE_NORMAL;
+        last_step_count = step_count;
+    } 
+		else
+		{
+        // 步数没有变化,检查是否需要切换到休眠状态
+        if (current_state == STATE_NORMAL)
+					{
+//            sleep_time = uwb_time_count - state_start_time;
+            if (sleep_time >= 30)
+						{ // 30秒后切换到休眠状态
+                current_state = STATE_SLEEP;
+                sleep_time = 0;
+            }
+          }
+     }
+}
 //void phy_timer_callback(uint32_t time)
 //{
 // lora_tx_flag++;
@@ -489,7 +515,7 @@
             uint32_t lock;
             trace_flush();
             lock = int_lock();
-						LOG_INFO(TRACE_MODULE_APP, "进入深度休眠\r\n");
+						LOG_INFO(TRACE_MODULE_APP, "进入休眠\r\n");
 	          //关闭蓝牙 灯
 						LORA_LED_OFF;
 						GREEN_LED_OFF;
@@ -504,11 +530,11 @@
 }
 void IMUTask(void)
 {
-	if(nomove_count>5&&g_com_map[IMU_ENABLE]==1)
+	if(nomove_count>10&&g_com_map[IMU_ENABLE]==2)
 	{
-//		power_wakeup_enable(WK_UP_POSITION&gpio_state, POWER_WAKEUP_LEVEL_HIGH);//配置唤醒等待进入休眠	
-		power_enter_power_down_mode(1);
-//		mcu_deep_sleep();
+		power_wakeup_enable((enum POWER_WAKEUP_SOURCE_T)PCA_INPUT_DETECT, POWER_WAKEUP_LEVEL_LOW);
+		mcu_deep_sleep();
+
 	}
 }
 #define TEST_SPI_MASTER 0
@@ -539,9 +565,9 @@
 //    io_pin_mux_set(UART0_TX, IO_FUNC4);
 	
 		io_pin_mux_set(UART0_RX, IO_FUNC0);
-	  gpio_pin_set_dir(UART0_RX , GPIO_DIR_IN, 0);
+	  gpio_pin_set_dir(UART0_RX , GPIO_DIR_OUT, 0);
     io_pin_mux_set(UART0_TX, IO_FUNC0);
-	  gpio_pin_set_dir(UART0_TX , GPIO_DIR_IN, 0);	
+	  gpio_pin_set_dir(UART0_TX , GPIO_DIR_OUT, 0);	
 //	  board_debug_console_open(TRACE_PORT_UART0);
 //	  uart_receive(UART_ID0,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart0_receive_callback);//开启dma
 
@@ -649,6 +675,51 @@
       PCA9555_readdata(PCA9555_DEVICE_ADDR,pca9555writedata_input);//读输入寄存器的值
       check_input_change();
 }
+extern uint32_t uwb_time_count;
+void upload_apppoll()
+{	
+	  uint32_t elapsed_time_jibu;
+
+    switch (current_state) 
+			{
+        case STATE_NORMAL:
+            elapsed_time_jibu = uwb_time_count - state_start_time;
+				    switch(elapsed_time_jibu)
+						{
+							case UWB_OPEN_COUNT:
+											UWB_LED_OFF;
+											CloseUWB();	
+							break;
+							
+							case UWB_MEASUREMENT_INTERVAL:
+											UWB_LED_ON;
+											OpenUWB();	
+											LoraReportPoll();
+                      state_start_time = uwb_time_count;							
+							break;						
+						}
+            break;
+
+        case STATE_SLEEP:
+            elapsed_time_jibu = uwb_time_count - state_start_time;
+				    switch(elapsed_time_jibu)
+						{
+							case UWB_OPEN_COUNT:
+											UWB_LED_OFF;
+											CloseUWB();	
+							break;
+							
+							case UWB_MEASUREMENT_INTERVAL_SLEEP:
+											UWB_LED_ON;
+											OpenUWB();	
+											LoraReportPoll();
+                      state_start_time = uwb_time_count;							
+							break;						
+						}
+            break;
+			}	
+
+}
 uint8_t io14_state;
 uint16_t  lora_freq=0;
 uint16_t  lora_up_count=0;
@@ -676,6 +747,7 @@
 	  pca_input_detection_init(pca_handler);
 		IIC2_Init();
     Accelerometer_Init();
+
 		PCA9555_init();
 		Lora_1268_Init();
     SwitchLoraSettings(478,7,22);
@@ -693,12 +765,10 @@
 //		OpenUWB();
     while (1)
     { 
-			#ifdef DEBUG_BOXING
-		gpio_pin_clr(BOXING_PIN);//测试
-//		gpio_pin_set(BOXING_PIN);//测试
-		#endif	
 //	    Lora_Tx_Poll();
 //			uwb_app_poll();
+			check_step_and_update_state();
+			upload_apppoll();
       IdleTask();
 			IMUTask();
     }

--
Gitblit v1.9.3