RF2.4G 对码清码方法

发布时间 2023-07-10 11:25:21作者: steven_lg

对码原理:遥控器发出对码指令,灯具根据接收的指令,对比EEPROM存储的UID,一致则处理;未找到则,将当前第一个UID清除,并存储改UID到序列末尾。
清码原理:遥控器发送清码指令,灯具根据接收指令,对比EEPROM的UID,一致则返回UID组数据,并执行清码操作(清除EEPROM存储的UID);未找到则不执行。
1.检测UID是否一致

uint8_t MatchIDs(uint8_t *Id)   //ID匹配
{
uint8_t i,j;
uint8_t matchflag;

for(i=0;i<4;i++)
{
	matchflag=0;
	for(j=0;j<4;j++)
	{
		if(Id[j+1]==RemoteID[i][j]) //接收ID值和灯组ID一致
		{
			matchflag++;
		}
	}
	if(matchflag==4) 
	{
		if((Id[5]==RemoteID[i][4]) || (Id[5]==0xDF)) //分组序号能对应上
		{	
			RemoteMatchNum=i; //组数赋值
			return 1;
		}
	}
}
RemoteMatchNum=0xff;
return 0;
}

2.对码操作

void MatchCode(uint8_t *cmd)   //对码
{
uint8_t i,j;
uint8_t countx;

for(i=0;i<4;i++)
{
	countx=0;
	for(j=0;j<4;j++)
	{
		if(cmd[j+1]==RemoteID[i][j]) 
		{
			countx++;
		}
	}
	if(countx>=4) //对码值已经之前有存储过
	{
		return; //跳出
	}
}

if(cmd[5]==0xDF) //分组值为0xDF
{
	return;
}	
for(i=3;i>0;i--)
{
	for(j=0;j<5;j++)
	{
		RemoteID[i][j]=RemoteID[i-1][j];  //遥控码当前ID用低位数组赋值
	}
}	

for(i=0;i<5;i++)
{
	RemoteID[0][i]=cmd[i+1]; //遥控码最低数组赋值
}
StoreIds();   //保存ID
Flicker=3; //闪烁3次
FlickerSpeed=10; //速度等级为10
MatchCodeEn=0; //对码清码失能
}

3.清码操作

void ClearCode(void)   //清码
{		
uint8_t i,j;

i=RemoteMatchNum; //组数值赋值
while(i)
{
	for(j=0;j<5;j++)
	{
		RemoteID[i][j]=RemoteID[i-1][j]; //当前ID被下一列ID覆盖
	}
	i--;
}
RemoteID[0][0]=0xFF;    //id //最低一组UID码清零
RemoteID[0][1]=0xFF;    //id
RemoteID[0][2]=0xFF;    //id
RemoteID[0][3]=0xFF;    //id
RemoteID[0][4]=0xFF;    //组
StoreIds();
Flicker=6;  //闪烁6次
MatchCodeEn=0; //对码清码失能
FlickerSpeed=3; //速度等级为3
}