From 8316843f9c1046459d66d7fd79d2b172fc4903d0 Mon Sep 17 00:00:00 2001 From: zhangbo <zhangbo@qq.com> Date: 星期三, 02 七月 2025 19:41:25 +0800 Subject: [PATCH] 能正确休眠版本 --- keil/include/main/main.c | 450 +++++++++++++++++++++++++++++++------------------------ 1 files changed, 254 insertions(+), 196 deletions(-) diff --git a/keil/include/main/main.c b/keil/include/main/main.c index e1f2361..d2c5f22 100644 --- a/keil/include/main/main.c +++ b/keil/include/main/main.c @@ -46,6 +46,8 @@ #define UWB_MEASUREMENT_INTERVAL 5 #define UWB_MEASUREMENT_INTERVAL_SLEEP 30 +#define INACTIVE_TIMEOUT 30 + extern uint8_t mUsartReceivePack[100]; extern uint8_t mUsart2ReceivePack[150]; extern uint8_t state5V_prase_flag,gps_prase_flag; @@ -143,54 +145,20 @@ lock = int_lock(); // LOG_INFO(TRACE_MODULE_APP, "进入深度休眠\r\n"); // gps_air780_power_change(0,0);//关闭gps,4G - PCA9555_Set_One_Value_Output(LED_POWER,0);//输出低电平关闭LED + PCA9555_Set_One_Value_Output(LED_POWER,0);//输出低电平关闭LED PCA9555_Set_One_Value_Output(GPS_POWER,0);//关闭gps,4G +// PCA9555_Set_One_Value_Output(TTS_ENABLE,0); + PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0);//关闭gps,4G - sleep_timer_stop(); + + sleep_timer_stop(); + //adc_close(); power_enter_power_down_mode(1); // LOG_INFO(TRACE_MODULE_APP, "从休眠出来\r\n"); sys_reset(0); int_unlock(lock); -//// uint32_t lock; -//// trace_flush(); -//// lock = int_lock(); -////// LOG_INFO(TRACE_MODULE_APP, "进入深度休眠\r\n"); -//// gps_air780_power_change(0,0);//关闭gps,4G -// deep_sleep_falg=0; -// PCA9555_Set_One_Value_Output(LED_POWER,0);//输出低电平关闭LED -// PCA9555_Set_One_Value_Output(GPS_POWER,0);//关闭gps,4G -//// PCA9555_Set_One_Value_Config(MAIN_RI,0);//配置4G唤醒引脚为输入 -//// -////// PCA9555_Set_One_Value_Output(MAIN_RI,1); -// boot_deinit(); -// CloseUWB(); -// if(onlyoneflag) -// { -// onlyoneflag=0; -// userkey_state=4; -// heartbeasend_flag = 1; -// sleepflag=1; -// sleepflagtime=HIDO_TimerGetTick(); -// } -// if(sleepflag) -// { -// if(HIDO_TimerGetTick() - sleepflagtime>3) -// { -// PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0);//关闭gps,4G -// } -// } -// -//// PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0);//关闭gps,4G -// -//// sleep_timer_stop(); -//// //adc_close(); -//// power_enter_power_down_mode(1); -//// delay_us(200000); -//// sys_reset(0); -////// LOG_INFO(TRACE_MODULE_APP, "从休眠出来\r\n"); -//// int_unlock(lock); } uint8_t jiancebat_percent_flag; static void adc_callback(void *data, uint32_t number) @@ -253,6 +221,7 @@ userkey_state=4; heartbeasend_flag = 1; sleepflag=1; + sleepflagtime=HIDO_TimerGetTick(); } } @@ -273,6 +242,7 @@ } } +uint16_t gaodu; uint8_t guanjiflag; uint8_t heartbeasend_flag; uint32_t guanjiflagtime; @@ -298,6 +268,7 @@ keystarttime3 = HIDO_TimerGetTick(); } } +uint8_t user_Power_keyflag=0; void PowerTask(void) { if(read_powerkey_input_pca()) @@ -317,9 +288,12 @@ // PCA9555_Set_One_Value_Output(GPS_POWER,0);//关GPS // PCA9555_Set_One_Value_Output(PWR_ENABLE,0);//低电平关闭 heartbeasend_flag = 1; + user_Power_keyflag=1; guanjiflag=1; userkey_state = 2; guanjiflagtime=HIDO_TimerGetTick(); + g_com_map[KEY_POWERON] = user_Power_keyflag; + save_com_map_to_flash(); } }else { @@ -364,6 +338,7 @@ HIDO_TimerTick(); // if(nomove_count<=g_com_map[NOMOVESLEEP_TIME])//防止溢出 nomove_count++; + gaodu=GetPressAndHeight()*100; // else{ // nomove_count=g_com_map[NOMOVESLEEP_TIME]+1; // } @@ -374,6 +349,7 @@ uint8_t input5v_time; extern uint8_t taglist_num; uint8_t gps_ntripsend; +extern uint8_t uwb_OpenClose_flag; static void sleep_timer_callback(void *dev, uint32_t time) { // powerON_Task(); @@ -404,7 +380,7 @@ // uart_send(UART_ID1, ceshidata, 50,NULL); } input5v_time=1; - if(taglist_num==0&&g_com_map[UWBFrequency]==1&&g_com_map[UWBENBLE]==1) + if(taglist_num==0&&g_com_map[UWBFrequency]==1&&g_com_map[UWBENBLE]==1&&uwb_OpenClose_flag==1) { CloseUWB(); Uwb_init(); @@ -422,6 +398,57 @@ delaysleep_count--; } +#ifdef JIBU_XIUMIAN + +uint16_t sleep_time=0; +uint32_t state_start_time_jibu=0; +uint8_t exercise_state=0; +uint32_t step_count = 0; // 步数计数 +uint32_t last_step_count = 0; // 上一次步数 +void check_step_and_update_state(void) +{ + if ((step_count != last_step_count)) + { + // 步数有变化,重置状态为正常状态 + last_step_count = step_count; + + if(current_state == STATE_SLEEP) + { + state_start_time_jibu = uwb_time_count; + state_start_time=uwb_time_count; + } +// if (current_state != STATE_NORMAL) +// { +// // 关闭可能正在运行的UWB +// if (uwb_is_on) { +// CloseUWB(); +// UWB_LED_OFF; +// uwb_is_on = false; +// } +// current_state = STATE_NORMAL; +// state_start_time = uwb_time_count; // 重置测距周期 +// } + current_state = STATE_NORMAL; + exercise_state=1; + last_step_count = step_count; + + } + else + { + // 步数没有变化,检查是否需要切换到休眠状态 + if (current_state == STATE_NORMAL) + { + uint32_t inactive_time = uwb_time_count - state_start_time_jibu; + if (inactive_time >= INACTIVE_TIMEOUT) + { // 30秒后切换到休眠状态 + current_state = STATE_SLEEP; + exercise_state=2; + state_start_time_jibu=uwb_time_count; + } + } + } +} +#endif static void pca_handler(enum IO_PIN_T pin) { PCA9555_readdata(PCA9555_DEVICE_ADDR,pca9555writedata_input);//读输入寄存器的值 @@ -485,6 +512,10 @@ { g_com_map[UWBFrequency]=1; } + if(g_com_map[URT_BQ]>1) + { + g_com_map[URT_BQ]=0; + } // g_com_map[IP_0]=111; // g_com_map[IP_1]=198; // g_com_map[IP_2]=60; @@ -533,7 +564,7 @@ // } g_com_map[MODBUS_MODE] = 0; log_4g_enable_flag=g_com_map[LOG_4G_ENABLE]; - g_com_map[VERSION] = (1<<8)|22; + g_com_map[VERSION] = (1<<8)|25; LOG_INFO(TRACE_MODULE_APP,"设备ID: %x .\r\n",dev_id); @@ -544,6 +575,7 @@ LOG_INFO(TRACE_MODULE_APP,"设备UWB工作间隔: %x .\r\n",g_com_map[UWBFrequency]); LOG_INFO(TRACE_MODULE_APP,"设备GPS工作间隔: %x .\r\n",g_com_map[GPSFrequency]); LOG_INFO(TRACE_MODULE_APP,"当前GPS工作波特率: %d .\r\n",gpsbaudrate1); +// LOG_INFO(TRACE_MODULE_APP,"充电是否开机标志位: %d .\r\n",g_com_map[URT_BQ]); if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP) { LOG_INFO(TRACE_MODULE_APP,"TCP_RTCM模式,服务器地址: %d.%d.%d.%d:%d.\r\n",g_com_map[TCP_IP_0],g_com_map[TCP_IP_1],g_com_map[TCP_IP_2],g_com_map[TCP_IP_3],g_com_map[TCP_PORT]); @@ -572,166 +604,180 @@ extern uint8_t jiancebat_percent_flag; void IdleTask(void) { -if(read_5v_input_pca()) - { - if(state5v==0) +// if(g_com_map[URT_BQ]) +// {} +// else +// { +// +// +// } + + if(read_5v_input_pca()) { - state5v=1; - state5V_prase_flag=state5v; - gps_prase_flag=0;//解除gps解析 - uart1_change_from_gps_to_debug();//测试 - PCA9555_Set_One_Value_Output(MCU_A,1);//输出高电平切换为5V输入 - } - chongman_time=0; - only_one_flag=0; - uwbled=0; - rtkled=0; - led4g=0; - powerled=0; -// PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0); - while(1) - { - nomove_count = 0; - wdt_ping(WDT_ID0);//喂狗 -// adctick = HIDO_TimerGetTick(); - if(HIDO_TimerGetTick()-adctick>600) //10分钟采样一次 电量 + if(state5v==0) { - chongman_time=chongman_time+60; - adctick = HIDO_TimerGetTick(); - PCA9555_Set_One_Value_Output(ADC_MINIUS,0);//拉低 - adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样 - } - if(bat_percent>=99&&!only_one_flag) - { - only_one_flag=1; + state5v=1; + state5V_prase_flag=state5v; + gps_prase_flag=0;//解除gps解析 + uart1_change_from_gps_to_debug();//测试 + PCA9555_Set_One_Value_Output(MCU_A,1);//输出高电平切换为5V输入 + } chongman_time=0; - } - if(bat_percent>=99&&chongman_time>=180) + only_one_flag=0; + uwbled=0; + rtkled=0; + led4g=0; + powerled=0; + // PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0); + while(1) { - powerled = GREEN; - }else{ - powerled = RED; - } - if(DBG_GetMode() == DBG_MODE_SHELL) - { - if(ota_flag==1) - { -// OTA_Poll(); -// HTTPClient_Poll(); - } - else - { - uwb_app_poll(); - } - Internet_Poll(); - HIDO_TimerPoll(); - HIDO_ATLitePoll(); - TCPClient_Poll(); - if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP) - {TCPClient_Poll_1();} - if(flag_secondtask) - { - flag_secondtask = 0; - SecondTask(); - } - UserKeyTask(); - } - UART_CheckReceive(); - if(flag_secondtask) - { - flag_secondtask = 0; - SecondTask(); - } - if(DBG_GetMode() == DBG_MODE_SHELL) - { - Set4LEDColor(uwbled,rtkled,led4g,powerled); - if(g_com_map[CNT_RESTART]==1) + nomove_count = 0; + wdt_ping(WDT_ID0);//喂狗 + // adctick = HIDO_TimerGetTick(); + if(HIDO_TimerGetTick()-adctick>600) //10分钟采样一次 电量 { - g_com_map[CNT_RESTART]=0; - save_com_map_to_flash(); - NVIC_SystemReset(); + chongman_time=chongman_time+60; + adctick = HIDO_TimerGetTick(); + PCA9555_Set_One_Value_Output(ADC_MINIUS,0);//拉低 + adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样 + } + if(bat_percent>=99&&!only_one_flag) + { + only_one_flag=1; + chongman_time=0; + } + if(bat_percent>=99&&chongman_time>=180) + { + powerled = GREEN; + }else{ + powerled = RED; + } + if(DBG_GetMode() == DBG_MODE_SHELL) + { + if(ota_flag==1) + { + // OTA_Poll(); + // HTTPClient_Poll(); + } + else + { + uwb_app_poll(); + } + Internet_Poll(); + HIDO_TimerPoll(); + HIDO_ATLitePoll(); + TCPClient_Poll(); + if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP) + {TCPClient_Poll_1();} + if(flag_secondtask) + { + flag_secondtask = 0; + SecondTask(); + } + UserKeyTask(); + } + UART_CheckReceive(); + if(flag_secondtask) + { + flag_secondtask = 0; + SecondTask(); + } + if(DBG_GetMode() == DBG_MODE_SHELL) + { + Set4LEDColor(uwbled,rtkled,led4g,powerled); + if(g_com_map[CNT_RESTART]==1) + { + g_com_map[CNT_RESTART]=0; + save_com_map_to_flash(); + NVIC_SystemReset(); + } + } + else + { + Set4LEDColor(0,0,0,powerled); + } + if(input5v_time) + { + if(!read_5v_input_pca()) + { + break; + } } } - else - { - Set4LEDColor(0,0,0,powerled); - } - if(input5v_time) - { - if(!read_5v_input_pca()) - { - break; - } - } + // NVIC_SystemReset(); + // PCA9555_Set_One_Value_Output(PWR_ENABLE,0); + input5vflag=1; } -// NVIC_SystemReset(); -// PCA9555_Set_One_Value_Output(PWR_ENABLE,0); - input5vflag=1; - } - else - { - if(state5v==1) + else { - g_com_map[MODBUS_MODE] = 0; - state5v=0; - state5V_prase_flag=state5v; - gps_prase_flag=1;//恢复gps解析 - uart1_change_from_debug_to_gps();//测试 -// PCA9555_Set_One_Value_Output(MCU_A,0);//输出低电平切换为GPS - PCA9555_Set_One_Value_Output(LED_POWER,0);//输出低电平关闭LED - PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0); - PCA9555_Set_One_Value_Output(GPS_POWER,0);//关GPS - PCA9555_Set_One_Value_Output(PWR_ENABLE,0);//低电平关闭 - delay_us(1000000); - - } - } - UART_CheckReceive(); - if(g_com_map[CNT_RESTART]==1) - { - g_com_map[CNT_RESTART]=0; - NVIC_SystemReset(); - - } - if(g_com_map[MAP_SIGN_INDEX]!=0x55AA||g_com_map[COM_INTERVAL]==0) - { - NVIC_SystemReset(); - } - HIDO_TimerPoll(); - if(ledonflag==1) - { - ledonflag=0; - uwbled=0; - rtkled=0; - led4g=0; - powerled=0; - Set4LEDColor(LEDOFF,LEDOFF,LEDOFF,LEDOFF); - } - if(bat_percent<1&&bat_percent_only_one&&jiancebat_percent_flag) - { - userkey_state=3; - heartbeasend_flag = 1; - guanjiflag=1; - guanjiflagtime=HIDO_TimerGetTick(); - bat_percent_only_one=0; - } - if(guanjiflag) - { - rtkled=WHITE; - uwbled=WHITE; - led4g=WHITE; - powerled=WHITE; - Set4LEDColor(uwbled,rtkled,led4g,powerled); - if(HIDO_TimerGetTick() - guanjiflagtime>3) - { + if(state5v==1) + { + g_com_map[MODBUS_MODE] = 0; + state5v=0; + state5V_prase_flag=state5v; + gps_prase_flag=1;//恢复gps解析 + uart1_change_from_debug_to_gps();//测试 + // PCA9555_Set_One_Value_Output(MCU_A,0);//输出低电平切换为GPS PCA9555_Set_One_Value_Output(LED_POWER,0);//输出低电平关闭LED PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0); PCA9555_Set_One_Value_Output(GPS_POWER,0);//关GPS PCA9555_Set_One_Value_Output(PWR_ENABLE,0);//低电平关闭 - } - - } + delay_us(1000000); + + } + } + UART_CheckReceive(); + if(g_com_map[CNT_RESTART]==1) + { + g_com_map[CNT_RESTART]=0; + NVIC_SystemReset(); + + } + if(g_com_map[MAP_SIGN_INDEX]!=0x55AA||g_com_map[COM_INTERVAL]==0) + { + NVIC_SystemReset(); + } + HIDO_TimerPoll(); + if(ledonflag==1) + { + ledonflag=0; + uwbled=0; + rtkled=0; + led4g=0; + powerled=0; + Set4LEDColor(LEDOFF,LEDOFF,LEDOFF,LEDOFF); + } + if(bat_percent<5&&jiancebat_percent_flag) + { + WT588E_PLAY(14); + } + if(bat_percent<1&&bat_percent_only_one&&jiancebat_percent_flag) + { + WT588E_PLAY(15); + userkey_state=3; + heartbeasend_flag = 1; + guanjiflag=1; + guanjiflagtime=HIDO_TimerGetTick(); + bat_percent_only_one=0; + } + if(guanjiflag) + { + rtkled=WHITE; + uwbled=WHITE; + led4g=WHITE; + powerled=WHITE; + Set4LEDColor(uwbled,rtkled,led4g,powerled); + if(HIDO_TimerGetTick() - guanjiflagtime>3) + { + PCA9555_Set_One_Value_Output(TTS_ENABLE,0); //关闭语音输入 + PCA9555_Set_One_Value_Output(LED_POWER,0); //输出低电平关闭LED + PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0); + PCA9555_Set_One_Value_Output(GPS_POWER,0); //关GPS + PCA9555_Set_One_Value_Output(PWR_ENABLE,0); //低电平关闭 + } + + } } void boot_deinit(void) { @@ -752,10 +798,11 @@ extern uint32_t uwb_time_count; uint8_t GPS_UPLOAD_FLAG=0; uint32_t elapsed_time_jibu; +extern uint8_t uwb_OpenClose_flag; void upload_apppoll() { - if(current_state==STATE_NORMAL) + if(current_state==STATE_NORMAL&&uwb_OpenClose_flag==1) { if(g_com_map[UWBFrequency]>1) { @@ -777,10 +824,10 @@ else {} } - else if(current_state==STATE_SLEEP) + else if(current_state==STATE_SLEEP&&uwb_OpenClose_flag==1) { elapsed_time_jibu = uwb_time_count - state_start_time; - switch(elapsed_time_jibu==1) + switch(elapsed_time_jibu) { case UWB_OPEN_COUNT: CloseUWB(); @@ -849,7 +896,6 @@ int test1,test3; uint32_t test4; extern uint8_t receive_flag; -uint16_t gaodu; static void app_wdt_callback(void *dev, uint32_t status) { ASSERT(status, "WDT TIMEOUT,程序复位"); @@ -875,7 +921,7 @@ // delay_ms(100); // gaodu=GetPressAndHeight(); PCA9555_init(); - board_debug_console_open_baud(TRACE_PORT_UART1,BAUD_115200); + board_debug_console_open_baud(TRACE_PORT_UART1,BAUD_921600); // while(1); // Reset reason reset_cause_get(); @@ -899,7 +945,8 @@ Uart_Register(UART_ID_DBG_GPS, UART_ID1); DBG_Init(); - + + SendComMap(0x50,0); Internet_Init(); TCPClient_Init(); // if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_NTRIP) @@ -915,12 +962,22 @@ wdt_open(WDT_ID0,&app_wdt_cfg);//30s检测喂狗 LED_output_init();//配置彩色灯引脚 - + PCA9555_Set_One_Value_Output(TTS_ENABLE,1); WT588E02B_Init(); adc_open(&usr_adc_cfg); uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback); power_init(); Uwb_init(); + if(g_com_map[KEY_POWERON]==1) + { + WT588E_PLAY(0); //播报开机语音 + g_com_map[KEY_POWERON]=0; + save_com_map_to_flash(); + + + } + + if(g_com_map[UWBFrequency]&&g_com_map[UWBENBLE]) { OpenUWB(); @@ -967,7 +1024,8 @@ flag_secondtask = 0; SecondTask(); } - IMUTask(); + IMUTask(); IdleTask(); + check_step_and_update_state(); } } -- Gitblit v1.9.3