From 3529a847eaf2057928742178cca16eee57db31d0 Mon Sep 17 00:00:00 2001 From: chen <15335560115@163.com> Date: 星期五, 15 八月 2025 19:52:47 +0800 Subject: [PATCH] 初步调好demo,会有丢失测距后回来回复测距大概率蜂鸣器一直震的现象未解决 --- keil/include/main/main.c | 317 ++++++++++++++++++++++++++++++++-------------------- 1 files changed, 194 insertions(+), 123 deletions(-) diff --git a/keil/include/main/main.c b/keil/include/main/main.c index 42c7471..92b2c91 100644 --- a/keil/include/main/main.c +++ b/keil/include/main/main.c @@ -106,8 +106,8 @@ SEARCH_DEV, } Operation_step; Operation_step UWB_work_state; - - +void UWB_LED_Task(void); +void POWER_LED_Task(void); Commend_SendDate send_struct; struct ADC_CFG_T usr_adc_cfg = { .mode = ADC_MODE_CONTINUE, /* Selected single conversion mode */ @@ -256,54 +256,23 @@ int need_open_gps_count; uint8_t change_vibration=2; HIDO_UINT32 u32CurTick_Motor; +void UserKeyState_change(void); +void click_Task(void); void MotorPoll(void) { - if(!power_low_flag)//确认是否休眠下才开启功能 - { //马达震动逻辑 - if(g_com_map[MOTOR_ENABLE]) - { - if(motor_open_air_flag||moter_open_uwb_flag) - {motor_power_state=0; - if(motor_open_flag) - { - if (motor_count>=change_vibration) - { - change_vibration=VIBRATION_TIME; - motor_power_state = 1; - motor_count=0; - motor_open_flag=0; - update_led_power_state(); - } - motor_count++; - }else {//修改 - motor_power_state = 1; - if(motor_count>=NO_VIBRATION_TIME) - { - motor_power_state = 0; - motor_count=0; - motor_open_flag=1; - update_led_power_state(); - } - motor_count++; - } - - - } else { - motor_open_flag=1; - motor_count=0; - motor_power_state=1; - } - }else{ - motor_open_flag=1; - motor_count=0; - motor_power_state=1; - } - }else{ - motor_open_flag=1; - motor_count=0; - motor_power_state=1; + if(active_flag) +{ + if(change_by_distance()) + { + if(motor_count++%2==0) + motor_power_state=0;//开启 + else{ + motor_power_state=1;//关闭 + } } - +}else{ + motor_power_state=1;//关闭 + } } void MotorPollCheck(void) @@ -436,23 +405,25 @@ } void UserKeyTask(void) { - if(!GET_USERKEY) - { - if(HIDO_TimerGetTick() - keystarttime>3) - { - userkey_state = 1; - keystarttime = HIDO_TimerGetTick(); - TCPHeartBeatUpload();//立即上传该包 - } - if(HIDO_TimerGetTick() - keystarttime2>10) - { - g_com_map[CNT_RESTART] = 1; - } - }else - { - keystarttime = HIDO_TimerGetTick(); - keystarttime2 = HIDO_TimerGetTick(); - } +// if(!GET_USERKEY) +// { +// if(HIDO_TimerGetTick() - keystarttime>3) +// { +// userkey_state = 1; +// keystarttime = HIDO_TimerGetTick(); +// //TCPHeartBeatUpload();//立即上传该包 +// } +// if(HIDO_TimerGetTick() - keystarttime2>10) +// { +// //g_com_map[CNT_RESTART] = 1; +// } +// }else +// { +// keystarttime = HIDO_TimerGetTick(); +// keystarttime2 = HIDO_TimerGetTick(); +// } +UserKeyState_change(); +click_Task(); } void MinuteTask(void) { gpio_pin_clr(ADC_GND_ENABLE);//先拉低 @@ -467,18 +438,20 @@ } //UWB更新列表 TagListUpdate(); - if(!power_low_flag) - { - GPS_Poll(); - //gps_power_state=1;//常开GPS - }else{ - gps_power_state=0;//关闭GPS - update_led_power_state(); - //初始化GPS计数数据 - gps_need_data_flag=1; - gps_wait_count=0; - gps_timeout_flag=0; - } + POWER_LED_Task(); + UWB_LED_Task(); +// if(!power_low_flag) +// { +// GPS_Poll(); +// //gps_power_state=1;//常开GPS +// }else{ +// gps_power_state=0;//关闭GPS +// update_led_power_state(); +// //初始化GPS计数数据 +// gps_need_data_flag=1; +// gps_wait_count=0; +// gps_timeout_flag=0; +// } //gps_power_state=1;//测试gps长开 //UWB状态检测 if(!power_low_flag)//低供电下不需要检测重连 @@ -512,23 +485,34 @@ uint8_t flag_sleeptimer,flag_secondtask,secondtask_count,log_4g_enable_flag; uint8_t uwb_enable_flag=0; uint8_t enable_system_function_flag; - -static void sleep_timer_callback(void *dev, uint32_t time) +void POWER_LED_Task(void) { - // IO_control_init(); - - if(enbale_blink_flag) +if(enbale_blink_flag) { green_charge_state=0; charge_red_on(); } - - if(tt) - UWBPoll(); - //车载poll - UWB_Tag_Poll(); - - StatusChange(); + charge_state_change();//充电状态判断 + if(enbale_blink_flag) + { + delay_us(5000); + green_charge_state=0; + charge_red_off(); + } +} +extern uint8_t taglist_num; +void UWB_LED_Task(void) +{ + if(taglist_num!=0&&active_flag) + { + blink_led(&uwb_state); + }else{ + uwb_led_off(); + } +} +static void sleep_timer_callback(void *dev, uint32_t time) +{ + // IO_control_init(); MotorPoll(); update_led_power_state(); @@ -541,21 +525,113 @@ flag_sleeptimer = 1; - charge_state_change();//充电状态判断 - - if(enbale_blink_flag) - { - green_charge_state=0; - charge_red_off(); - } if(delaysleep_count>0) delaysleep_count--; //GPS工作逻辑 } +// 时间阈值定义 +#define LONG_PRESS_TIME 2 // 长按3秒阈值(单位:ms) +#define TRIPLE_CLICK_TIME 2 // 三连击总时间窗口 +#define CLICK_TIMEOUT 1 // 单击确认超时 +#define NEXT_CLICK_WAIT_TIMEOUT 1 // 按键下次单击等待时间 + +// 按键状态机 +typedef enum { + IDLE, // 空闲状态 + WAIT_NEXT_RISING, // 已按下待确认 + WAIT_NEXT_FALLING // 等待释放状态 +} ButtonState; +volatile ButtonState sos_state = IDLE,temp_state; static void voltage_input_handler(enum IO_PIN_T pin) { +} +uint8_t long_press_flag,double_click_flag,single_click_flag; +uint32_t current_time,first_press_time,press_duration,press_start_time,click_count,single_click_timer,rising_time,falling_time,temp_rising_time; +uint8_t active_flag=1; +void handle_long_press(void) +{ + +} +void handle_doouble_click(void) +{ + if(active_flag==1) + { + active_flag=0; + }else{ + active_flag=1; + } +} +void handle_single_click(void) +{ + +} +void click_Task(void) +{ +// 事件处理(按优先级顺序) + if (long_press_flag) { + handle_long_press(); + long_press_flag = 0; + } else if (double_click_flag) { + handle_doouble_click(); + double_click_flag = 0; + } else if (single_click_flag) { + handle_single_click(); + single_click_flag = 0; + } +} +static void sos_fall_handler(enum IO_PIN_T pin) +{ +sos_state=WAIT_NEXT_RISING; +falling_time=HIDO_TimerGetTick(); +//if(!power_low_flag&&active_flag) +} +void UserKeyState_change(void) +{ +if(sos_state==WAIT_NEXT_RISING) +{ + if(GET_USERKEY) + { + rising_time=HIDO_TimerGetTick(); + if(rising_time-falling_time<=NEXT_CLICK_WAIT_TIMEOUT) + { + click_count++; + sos_state=WAIT_NEXT_FALLING; + if(click_count==2) + { + click_count=0; + sos_state=IDLE; + double_click_flag=1; + } + long_press_flag=0; + }else if(rising_time-falling_time>LONG_PRESS_TIME&&click_count==0) + { + click_count=0; + long_press_flag=1; + + sos_state=IDLE; + }else{ + click_count=0; + sos_state=IDLE; + } +// motor_off(); + temp_rising_time=rising_time; + } +}else if(sos_state==WAIT_NEXT_FALLING) + { + if(HIDO_TimerGetTick()-temp_rising_time>NEXT_CLICK_WAIT_TIMEOUT) + { + + if(click_count==1) + { + single_click_flag=1; + } + click_count=0; + sos_state=IDLE; + } + + } } static void move_handler(enum IO_PIN_T pin) { @@ -715,6 +791,7 @@ int test1,test3; uint32_t test4; int16_t Voltage_input; +extern uint8_t uwb_rx_flag; int main(void) { board_clock_run(); @@ -751,8 +828,8 @@ //sys_timer_open(); // // TODO 4G - Uart_Register(UART_ID_4G, UART_ID0); - Internet_Init(); +// Uart_Register(UART_ID_4G, UART_ID0); +// Internet_Init(); //TCPClient_Init(); @@ -767,7 +844,7 @@ Accelerometer_Init(); IO_control_init(); - gps_air780_power_change(0,1);//开启gps,4G + gps_air780_power_change(0,0);//开启gps,4G //加速度计初始化必须在IO_control_init之前因为复用SDA引脚 Program_Init(); //uart_open(UART_ID1, &test_uart_cfg); @@ -786,37 +863,31 @@ gpio_pin_clr(ADC_GND_ENABLE);//先拉低 adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样 board_acceleration_detection_init(move_handler); + board_SOS_fall_detection_init(sos_fall_handler); + Uwb_init(); + OpenUWB(); // LOG_INFO(TRACE_MODULE_APP, "测试进入app"); //board_4GUsart_detection_init(_4gUsart_handler); while (1) - { tt1=gpio_pin_get_val(ADC_GND_ENABLE); + { +// tt1=gpio_pin_get_val(ADC_GND_ENABLE); + if(active_flag) + { + if(!uwb_rx_flag) + { + OpenUWB(); + } + uwb_app_poll(); + + }else{ + CloseUWB(); + } + wdt_ping(WDT_ID0);//喂狗 - //tt2 = gpio_pin_get_val(_4G_USART_RX_Pin); + if(!power_low_flag)//确认是否休眠下才开启功能 { -// if(flag_TCP_reconnectting||IfTCPConnected()) -// { -// // LOG_INFO(TRACE_MODULE_APP, "处理4G任务\r\n"); -// -//// if(flag_4guart_needinit) -//// { -//// flag_4guart_needinit = 0; -//// AIR780EUartInit(); -//// }//yuan -// if(flag_4G_recdata==1) -// { -// flag_4G_recdata = 2; -// -// //LOG_INFO(TRACE_MODULE_APP, "运行Socket_RecvAll tt2 %d\r\n",tt2); -// Socket_RecvAll(); -// } -// air780_led_on(); -// Internet_Poll(); -// HIDO_ATLitePoll(); -// HIDO_TimerPoll(); -// TCPClient_Poll(); -// air780_led_off(); -// } + } if(flag_secondtask) { -- Gitblit v1.9.3