From faa3a1bdc146174d88d7a0b5176dbc9af48ef635 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E7=90=AA?= Date: Mon, 27 Jul 2026 11:45:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E9=81=A5=E6=8E=A7=E5=AF=B9?= =?UTF-8?q?=E7=A0=81=E5=AE=B9=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ble/ble_peripheral/app/src/Rf433.c | 73 ++++++++++++++----- 1 file changed, 56 insertions(+), 17 deletions(-) diff --git a/project/example/ble/ble_peripheral/app/src/Rf433.c b/project/example/ble/ble_peripheral/app/src/Rf433.c index 59d99c4..0c05e30 100644 --- a/project/example/ble/ble_peripheral/app/src/Rf433.c +++ b/project/example/ble/ble_peripheral/app/src/Rf433.c @@ -79,6 +79,10 @@ static uint8_t ssse=0; static volatile uint16_t rf_frame_sequence; static uint16_t pair_last_frame_sequence; static uint32_t pair_candidate_data; +static uint32_t pair_alternate_data; +static uint8_t pair_candidate_valid; +static uint8_t pair_alternate_count; + static uint8_t pair_frame_silence_ticks; static uint8_t pairing_feedback_active; @@ -94,8 +98,8 @@ static uint16_t pairing_saved_c; static uint16_t pairing_saved_w_duty; static uint16_t pairing_saved_c_duty; -#define PAIR_HOLD_FRAME_COUNT 8U -#define PAIR_FRAME_SILENCE_TICKS 50U +#define PAIR_HOLD_FRAME_COUNT 4U +#define PAIR_FRAME_SILENCE_TICKS 100U uint8_t long_flag_s=0; // 在固定大小数组中添加新元素(滑动窗口) @@ -197,35 +201,70 @@ static void Pairing_Feedback_Task(void) pairing_feedback_on = pairing_feedback_on ? 0U : 1U; Pairing_Feedback_Apply(pairing_feedback_on); } +static void Pairing_Candidate_Reset(void) +{ + long_press_cnt = 0U; + pair_candidate_data = 0U; + pair_alternate_data = 0U; + pair_candidate_valid = 0U; + pair_alternate_count = 0U; + pair_frame_silence_ticks = 0U; +} + static void Encoder_key_NoCode(){ uint8_t i=0,j=0,isok=0,updata=0; uint16_t times_s=0; - if(rf_frame_sequence == pair_last_frame_sequence){ - if(pair_frame_silence_ticks < 0xffU) pair_frame_silence_ticks++; - if(pair_frame_silence_ticks > PAIR_FRAME_SILENCE_TICKS){ - long_press_cnt = 0U; - pair_candidate_data = 0U; - } - return; - } + if(pair_frame_silence_ticks < 0xffU) pair_frame_silence_ticks++; + if(pair_frame_silence_ticks > PAIR_FRAME_SILENCE_TICKS) + Pairing_Candidate_Reset(); + if(rf_frame_sequence == pair_last_frame_sequence) return; pair_last_frame_sequence = rf_frame_sequence; - pair_frame_silence_ticks = 0U; - if(!((res_data==Brightness_H||res_data==Brightness_L||res_data==B_Brightness_H||res_data==B_Brightness_L||res_data==F_Brightness_10||res_data==F_Brightness_100)&&time_5s<=50000&&ssse==0)){ - long_press_cnt = 0U; - pair_candidate_data = 0U; + if(ssse != 0U || time_5s > 50000U) return; + if(!(res_data==Brightness_H||res_data==Brightness_L|| + res_data==B_Brightness_H||res_data==B_Brightness_L|| + res_data==F_Brightness_10||res_data==F_Brightness_100)) + { return; } - if(pair_candidate_data == receive_data){ - long_press_cnt++; - }else{ + if(!pair_candidate_valid) + { pair_candidate_data = receive_data; + pair_candidate_valid = 1U; long_press_cnt = 1U; + pair_alternate_count = 0U; + pair_frame_silence_ticks = 0U; + } + else if(pair_candidate_data == receive_data) + { + long_press_cnt++; + pair_alternate_count = 0U; + pair_frame_silence_ticks = 0U; + } + else + { + if(pair_alternate_data == receive_data) + { + pair_alternate_count++; + } + else + { + pair_alternate_data = receive_data; + pair_alternate_count = 1U; + } + + if(pair_alternate_count >= 2U) + { + pair_candidate_data = pair_alternate_data; + long_press_cnt = pair_alternate_count; + pair_alternate_count = 0U; + pair_frame_silence_ticks = 0U; + } } if(long_press_cnt>=PAIR_HOLD_FRAME_COUNT){