zhangbo
2025-04-21 57b984b8395bb30b2d170369c75f19722502b104
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();
    }