| | |
| | | |
| | | |
| | | /****************************************************************引脚宏定义**************************************************/ |
| | | #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]; |
| | |
| | | } |
| | | |
| | | } |
| | | 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]) |
| | | { |
| | |
| | | }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++; |
| | |
| | | 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; |
| | |
| | | } |
| | | 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 |
| | |
| | | // 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 |
| | | |
| | |
| | | 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; |
| | |
| | | pca_input_detection_init(pca_handler); |
| | | IIC2_Init(); |
| | | Accelerometer_Init(); |
| | | |
| | | PCA9555_init(); |
| | | Lora_1268_Init(); |
| | | SwitchLoraSettings(478,7,22); |
| | |
| | | // 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(); |
| | | } |