Check the rest of your code for the same issue - I found two more.
void ACK()
{
byte ack[6];
ack[0] = 0xAF;
ack[1] = 0x1F;
ack[2] = DID_H;
ack[3] = DID_L;
ack[4] = 0x22;
ack[5] = 0xAA;
byte crc = 0x00;
for(int i=0;i<=5;i++)
{
crc ^= ack[i];
}
ack[6] = crc; // <=== overflow
zb.write(ack,sizeof(ack));
}
void NAK()
{
byte ack[6];
ack[0] = 0xAF;
ack[1] = 0x1F;
ack[2] = DID_H;
ack[3] = DID_L;
ack[4] = 0x22;
ack[5] = 0xFF;
byte crc = 0x00;
for(int i=0;i<=5;i++)
{
crc ^= ack[i];
}
ack[6] = crc; // <=== overflow
zb.write(ack,sizeof(ack));
}