保留最近对码的五个遥控器

This commit is contained in:
2026-07-27 23:54:48 +08:00
parent e874a8673e
commit bb7662fda2
@@ -105,18 +105,58 @@ uint8_t long_flag_s=0;
void _433_fun(void);
// 在固定大小数组中添加新元素(滑动窗口)
void addToFixedArray(uint8_t arr[], uint8_t newValue) {
uint8_t i;
// 所有元素向后移动一位
for( i = 4; i > 0; i--) {
arr[i] = arr[i - 1];
}
// 在头部插入新值
arr[0] = newValue;
// Keep paired addresses ordered from oldest to newest.
static uint8_t Pairing_Address_IsEmpty(uint8_t high, uint8_t low)
{
return ((high == 0U && low == 0U) ||
(high == 0xffU && low == 0xffU));
}
static void Pairing_Address_Touch(uint8_t high, uint8_t low)
{
uint8_t next_h[5];
uint8_t next_l[5];
uint8_t count = 0U;
uint8_t i;
for(i = 0U; i < 5U; i++)
{
if(Pairing_Address_IsEmpty(adress_H_array[i], adress_L_array[i])) continue;
if(adress_H_array[i] == high && adress_L_array[i] == low) continue;
next_h[count] = adress_H_array[i];
next_l[count] = adress_L_array[i];
count++;
}
if(count >= 5U)
{
for(i = 0U; i < 4U; i++)
{
next_h[i] = next_h[i + 1U];
next_l[i] = next_l[i + 1U];
}
count = 4U;
}
next_h[count] = high;
next_l[count] = low;
count++;
for(i = 0U; i < 5U; i++)
{
if(i < count)
{
adress_H_array[i] = next_h[i];
adress_L_array[i] = next_l[i];
}
else
{
adress_H_array[i] = 0xffU;
adress_L_array[i] = 0xffU;
}
}
}
static void Pairing_Feedback_Apply(uint8_t on)
{
Light_Transition_SetFeedback(1U, on);
@@ -206,7 +246,6 @@ static void Pairing_Candidate_Reset(void)
static void Encoder_key_NoCode(){
uint8_t i=0,j=0,isok=0,updata=0;
uint16_t times_s=0;
if(pair_frame_silence_ticks < 0xffU) pair_frame_silence_ticks++;
@@ -271,52 +310,13 @@ static void Encoder_key_NoCode(){
pair_deferred_command=0U;
if(res_data==Brightness_H||res_data==B_Brightness_H||res_data==F_Brightness_10){
adress=receive_data >>8;
adress_H = (receive_data >> 16) & 0xff;
adress_L = (receive_data >> 8) & 0xff;
// 第一步:检查是否已存在
for(j = 0; j <5; j++) {
if(adress_H_array[j] == adress_H && adress_L_array[j] == adress_L) {
isok=1;
break;
}
}
// 如果不存在,找空位添加
if(j==5) { // 循环完整结束,说明不存在
// 寻找空位置(值为0的位置)
for(i = 0; i <=4; i++) {
if(adress_H_array[i] == 0 && adress_L_array[i] == 0) {
adress_H_array[i] = adress_H;
adress_L_array[i] = adress_L;
isok=1;
break;
}
if(i==4){
for(j = 0; j <5; j++) {
if(adress_H_array[j] == adress_H && adress_L_array[j] == adress_L) {
updata=1;
break;
}
}
if(updata==0){
addToFixedArray(adress_H_array,adress_H);
addToFixedArray(adress_L_array,adress_L);
}
}
}
}
times_s=300;
match_success=1;
/// EA=0;
isok=0;
Pairing_Feedback_Start(times_s);
adress=receive_data >>8;
adress_H = (receive_data >> 16) & 0xff;
adress_L = (receive_data >> 8) & 0xff;
Pairing_Address_Touch(adress_H, adress_L);
times_s=300;
match_success=1;
Pairing_Feedback_Start(times_s);
}
else if(res_data==Brightness_L||res_data==B_Brightness_L||res_data==F_Brightness_100){
adress_H_array[0] = 0xff;