From f224d649c2d62d0289f47ba704c7da3509647ff4 Mon Sep 17 00:00:00 2001 From: zhangbo <zhangbo@qq.com> Date: 星期四, 17 四月 2025 14:26:19 +0800 Subject: [PATCH] 现在的UWB常开1s测距一次(和老免布线基站测距)功耗是95ma一秒上传一次数据 --- keil/include/main/main.c | 262 ++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 194 insertions(+), 68 deletions(-) diff --git a/keil/include/main/main.c b/keil/include/main/main.c index 0cc768d..b19613c 100644 --- a/keil/include/main/main.c +++ b/keil/include/main/main.c @@ -24,12 +24,6 @@ #include "PCA9555.h" #include "WS2812.h" #include "DBG.h" -typedef enum -{ - RTCMMODE_NONE, - RTCMMODE_TCP, - RTCMMODE_NTRIP, -}RTCMMode; //#define DEBUG_MODE extern int simple_main(void); @@ -44,6 +38,10 @@ #define MOTOR_COUNT_TIME 1 #define WARING_LIMIT_TIME 10 #define UPDATE_TIME 10 + +//室内外阈值 +#define XINGHAOQIANGDU_VALUE 100 +#define WEIXINGSHULIANG_VALUE 5 extern uint8_t mUsartReceivePack[100]; @@ -102,7 +100,7 @@ .flow = UART_FLOW_CONTROL_NONE, .rx_level = UART_RXFIFO_CHAR_1, .tx_level = UART_TXFIFO_EMPTY, - .baud = BAUD_115200, + .baud = BAUD_9600, #if (TEST_UART_MODE == TEST_UART_POLL_MODE) .dma_en = false, .int_rx = false, @@ -126,14 +124,16 @@ uint32_t lock; trace_flush(); lock = int_lock(); - LOG_INFO(TRACE_MODULE_APP, "进入深度休眠\r\n"); -// gps_air780_power_change(0,0);//关闭gps,4G +// LOG_INFO(TRACE_MODULE_APP, "进入深度休眠\r\n"); + PCA9555_Set_One_Value_Output(MAIN_RI,1); + PCA9555_Set_One_Value_Output(MAIN_RI,1); PCA9555_Set_One_Value_Output(GPS_POWER,0);//关闭gps,4G - PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0);//关闭gps,4G - sleep_timer_stop(); + PCA9555_Set_One_Value_Output(LED_POWER,0);//关闭DENG + PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0);//关闭gps,4G + sleep_timer_stop(); //adc_close(); power_enter_power_down_mode(1); - LOG_INFO(TRACE_MODULE_APP, "从休眠出来\r\n"); +// LOG_INFO(TRACE_MODULE_APP, "从休眠出来\r\n"); sys_reset(0); int_unlock(lock); } @@ -163,11 +163,11 @@ { //power_low_flag=1; //gps_air780_power_change(gps_power_state,0);//gps原样,关闭4G - LOG_INFO(TRACE_MODULE_APP, "电池电压低于3.3V,4G,GPS停止工作\r\n"); +// LOG_INFO(TRACE_MODULE_APP, "电池电压低于3.3V,4G,GPS停止工作\r\n"); }else{ //power_low_flag=0; //gps_air780_power_change(gps_power_state,1);//gps原样,开启4G - LOG_INFO(TRACE_MODULE_APP, "电池电压正常,4G,GPS,正常工作\r\n"); +// LOG_INFO(TRACE_MODULE_APP, "电池电压正常,4G,GPS,正常工作\r\n"); } PCA9555_Set_One_Value_Output(ADC_MINIUS,1);//拉高 } @@ -183,7 +183,8 @@ void IMUTask(void) { if(nomove_count>g_com_map[NOMOVESLEEP_TIME]&&g_com_map[IMU_ENABLE]==1) - {//power_wakeup_enable((enum POWER_WAKEUP_SOURCE_T)ACCLERATE_DETECT_Pin, POWER_WAKEUP_LEVEL_HIGH); + { + power_wakeup_enable((enum POWER_WAKEUP_SOURCE_T)PCA_INPUT_DETECT, POWER_WAKEUP_LEVEL_LOW); mcu_deep_sleep(); } } @@ -281,11 +282,26 @@ uint8_t flag_sleeptimer,flag_secondtask,secondtask_count,log_4g_enable_flag; uint8_t uwb_enable_flag=0; uint8_t input5v_time; +uint8_t heart_upload_time=0; extern uint8_t taglist_num; +//extern uint8_t ceshidata[500]; +extern uint8_t ceshichangdu; +uint8_t gps_ntripsend; + +extern uint8_t lounei_flag; +extern uint16_t g_spsum_GSV,g_snum_GSV; +extern uint16_t g_spsum_GSV_sum; +extern uint16_t g_snum_GSV_sum; +extern uint8_t ceju_leave_flag; +extern uint8_t fixed_solution_count_minute; +uint8_t open_gps_time=0; +uint16_t uwb_time_count=0; static void sleep_timer_callback(void *dev, uint32_t time) { if(secondtask_count++%2==0) - { + { + open_gps_time++; + uwb_time_count++; input5v_time=1; flag_secondtask = 1; if(!read_5v_input_pca()) @@ -299,16 +315,84 @@ ledonflag=1; // ledontime=HIDO_TimerGetTick(); Set4LEDColor(uwbled,rtkled,led4g,powerled); +// uart_send(UART_ID1, ceshidata, 50,NULL); } input5v_time=1; if(taglist_num==0) { - CloseUWB(); +// CloseUWB(); Uwb_init(); - OpenUWB(); +// OpenUWB(); } - }else{ - flag_secondtask = 0; +// in_the_room_flag=1; + if(30<open_gps_time&&open_gps_time<=90) + { + Receive_g_spsum_Data(g_spsum_GSV); + Receive_g_snum_Data(g_snum_GSV); + if((g_spsum_GSV_sum<XINGHAOQIANGDU_VALUE||g_snum_GSV_sum<WEIXINGSHULIANG_VALUE)&&(fixed_solution_count_minute<30)) + { + lounei_flag=1; + } + if((XINGHAOQIANGDU_VALUE<g_spsum_GSV_sum&&WEIXINGSHULIANG_VALUE<g_snum_GSV_sum)&&(fixed_solution_count_minute>30)) + { + lounei_flag=0; + } + } + + if(open_gps_time>90) + { + if(ceju_leave_flag==1) + { + Receive_g_spsum_Data(g_spsum_GSV); + Receive_g_snum_Data(g_snum_GSV); + + if((g_spsum_GSV_sum<XINGHAOQIANGDU_VALUE||g_snum_GSV_sum<WEIXINGSHULIANG_VALUE)&&(fixed_solution_count_minute<30)) + { + lounei_flag=1; + } + if((XINGHAOQIANGDU_VALUE<g_spsum_GSV_sum&&WEIXINGSHULIANG_VALUE<g_snum_GSV_sum)&&(fixed_solution_count_minute>30)) + { + lounei_flag=0; + } + + if(heart_upload_time==60) + { + ceju_leave_flag=0; + fixed_solution_count_minute=0; + if(lounei_flag==1) + { + PCA9555_Set_One_Value_Output(GPS_POWER,0); + } + } + if(heart_upload_time==0||heart_upload_time==60) + { + heart_upload_time=0; + } + heart_upload_time++; + } + + } + if(open_gps_time>149&&lounei_flag==1) + { + + if(open_gps_time-90==60) + { + open_gps_time=90; + TCPHeartBeatUpload(); + } + + + } + uwb_app_poll(); + + } + else + { + flag_secondtask = 0; + } + if(gps_ntripsend==1) + { + gps_ntripsend=2; } if(delaysleep_count>0) delaysleep_count--; @@ -317,25 +401,26 @@ static void pca_handler(enum IO_PIN_T pin) { PCA9555_readdata(PCA9555_DEVICE_ADDR,pca9555writedata_input);//读输入寄存器的值 - uint16_t gpio_state; - gpio_state=(uint16_t)pca9555writedata_input[0]<<8|pca9555writedata_input[1]; - test41++; - if(WAKE_UP_POSITION&gpio_state) - { - nomove_count=0; - test11++; - } -// if(!(MAIN_RI_POSITION&gpio_state)) + check_input_change(); +// uint16_t gpio_state; +// gpio_state=(uint16_t)pca9555writedata_input[0]<<8|pca9555writedata_input[1]; +// test41++; +// if(WAKE_UP_POSITION&gpio_state) // { -// flag_4G_recdata = 1; -// delaysleep_count = 3; -// test21++; +// nomove_count=0; +// test11++; // } - if((PWR_ON_POSITION&gpio_state)) - { - PowerTask(); - test31++; - } +//// if(!(MAIN_RI_POSITION&gpio_state)) +//// { +//// flag_4G_recdata = 1; +//// delaysleep_count = 3; +//// test21++; +//// } +// if((PWR_ON_POSITION&gpio_state)) +// { +// PowerTask(); +// test31++; +// } } void _4gUsart_handler(enum IO_PIN_T pin) @@ -362,18 +447,37 @@ memcpy(&send_struct.gunLableId,&g_com_map[BIND_DEV_ID],2);//更新绑定ID send_struct.tagId=dev_id;//更新设备ID - g_com_map[IP_0]=111; - g_com_map[IP_1]=198; - g_com_map[IP_2]=60; - g_com_map[IP_3]=6; - g_com_map[PORT]=6666; - g_com_map[RTCMMODE_INDEX] = RTCMMODE_NTRIP; - snprintf((char *)&g_com_map[NTRIP_HOST_INDEX], 32, "140.143.212.42"); - g_com_map[NTRIP_PORT_INDEX] = HIDO_UtilStrToInt("8005"); -// snprintf((char *)&g_com_map[NTRIP_PORT_INDEX], 32, "8005"); - snprintf((char *)&g_com_map[NTRIP_USERNANME_INDEX], 32, "test005"); - snprintf((char *)&g_com_map[NTRIP_PASSWORD_INDEX], 32, "Hxzk0228"); - snprintf((char *)&g_com_map[NTRIP_SOURCENAME_INDEX], 32, "RTCM32_GNSS2"); +// g_com_map[IP_0]=111; +// g_com_map[IP_1]=198; +// g_com_map[IP_2]=60; +// g_com_map[IP_3]=6; +// g_com_map[PORT]=1102; + +// g_com_map[IP_0]=117; +// g_com_map[IP_1]=72; +// g_com_map[IP_2]=111; +// g_com_map[IP_3]=237; +// g_com_map[PORT]=7000; +// +// g_com_map[TCP_IP_0]=111; +// g_com_map[TCP_IP_1]=198; +// g_com_map[TCP_IP_2]=60; +// g_com_map[TCP_IP_3]=6; +// g_com_map[TCP_PORT]=1234; + /* + RTCMMODE_NONE, + RTCMMODE_TCP, + RTCMMODE_NTRIP, + */ +// g_com_map[RTCMMODE_INDEX] = RTCMMODE_NTRIP; + + +// snprintf((char *)&g_com_map[NTRIP_HOST_INDEX], 32, "140.143.212.42"); +// g_com_map[NTRIP_PORT_INDEX] = HIDO_UtilStrToInt("8005"); +//// snprintf((char *)&g_com_map[NTRIP_PORT_INDEX], 32, "8005"); +// snprintf((char *)&g_com_map[NTRIP_USERNANME_INDEX], 32, "test005"); +// snprintf((char *)&g_com_map[NTRIP_PASSWORD_INDEX], 32, "Hxzk0228"); +// snprintf((char *)&g_com_map[NTRIP_SOURCENAME_INDEX], 32, "RTCM32_GNSS2"); if(g_com_map[BIND_DEV_ID]==0) @@ -395,7 +499,7 @@ LOG_INFO(TRACE_MODULE_APP,"设备ID: %x .\r\n",dev_id); - LOG_INFO(TRACE_MODULE_APP,"固件版本:4G-GPS定位手环 V%d.%d. \r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff); + LOG_INFO(TRACE_MODULE_APP,"固件版本:MK-大工卡 V%d.%d. \r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff); LOG_INFO(TRACE_MODULE_APP,"服务器地址: %d.%d.%d.%d:%d.\r\n",g_com_map[IP_0],g_com_map[IP_1],g_com_map[IP_2],g_com_map[IP_3],g_com_map[PORT]); if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP) { @@ -413,13 +517,13 @@ { LOG_INFO(TRACE_MODULE_APP,"单点定位模式模式. \r\n"); } + delay_ms(500); } uint32_t adctick = 0; uint8_t only_one_flag; uint16_t chongman_time; uint8_t bat_percent_old=100; uint8_t input5vflag; -uint8_t kai_4g_flag; void IdleTask(void) { if(read_5v_input_pca()) @@ -462,13 +566,10 @@ } if(DBG_GetMode() == DBG_MODE_SHELL) { - if(kai_4g_flag==0) - { - kai_4g_flag=1; -// PCA9555_Set_One_Value_Output(AIR780E_ENBALE,1); - Shell_Init(); - } - HIDO_InputPoll(); + if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP) + {TCPClient_Poll_1();} + //HIDO_InputPoll(); + DBG_Poll(); Internet_Poll(); HIDO_TimerPoll(); HIDO_ATLitePoll(); @@ -480,7 +581,20 @@ 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()) @@ -501,7 +615,7 @@ 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(MCU_A,1);//输出低电平切换为GPS } } UART_CheckReceive(); @@ -538,6 +652,7 @@ uart_close(UART_ID1);//解绑原来串口1 uart_close(UART_ID0);//解绑原来串口0 } + uint8_t flag_4guart_needinit=0; uint8_t index1,index2,index3; int16_t Voltage_input; @@ -545,12 +660,14 @@ int test1,test3; uint32_t test4; extern uint8_t receive_flag; +extern uint8_t YUANGPS_ParseGGA_data[256]; +extern uint8_t YUANGPS_ParseGGA_changdu; int main(void) { board_clock_run(); boot_deinit(); board_pins_config(); - board_debug_console_open_baud(TRACE_PORT_UART1,BAUD_115200); + board_debug_console_open_baud(TRACE_PORT_UART1,BAUD_115200); // Reset reason reset_cause_get(); reset_cause_clear(); @@ -569,7 +686,9 @@ calib_chip(); wdt_close(WDT_ID0); Uart_Register(UART_ID_4G, UART_ID0); -// Uart_Register(UART_ID_DBG, UART_ID1); + Uart_Register(UART_ID_DBG_GPS, UART_ID1); + DBG_Init(); + Program_Init(); Internet_Init(); TCPClient_Init(); @@ -577,6 +696,10 @@ { NTRIPClient_Init(); NTRIPApp_Init(); + } + if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP) + { + TCPClient_Init_1(); } gpio_open(); LED_output_init();//配置彩色灯引脚 @@ -593,7 +716,7 @@ pca_input_detection_init(pca_handler);//pca检测输入 Uwb_init(); OpenUWB(); - DBG_Init(); +// DBG_SetMode(DBG_MODE_SHELL); // Shell_Init(); if(!read_5v_input_pca()) @@ -604,18 +727,21 @@ delay_ms(500); Set4LEDColor(LEDOFF,LEDOFF,LEDOFF,LEDOFF); } -// 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输入 + 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 while (1) { - 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; -- Gitblit v1.9.3