Busco Transmisor KEELOQ 433 Mhz

Hola Chicos/as.

Hace unos meses comencé un nuevo tema para recibir las señales de mandos a distancia rolling code tipo KEELOQ Aquí, está en el post #6 del enlace anterior.
.

Tras mucho navegar y como siempre con la ayuda de foreros, encontré y modifiqué un código que nos permite recibir y mostrar en serial monitor el código cambiante recibido.

Ahora me gustaría programar mi propio mando con arduino, generando mi propio numero de serie, numero de fabricante y poderlo transmitir y recibir con el otro codigo.
He buscado y rebuscado y solo encuentro codigos que hacen cosas parecidas pero no lo que quiero:

Uno de ellos, recibe keeloq y retransmite ese codigo.
Otro, genera datos keeloq con arduino pero para programar el chip original HCS301 de un mando (Fuera de arduino)
Otro, encripta/desencripta pero siempre el mismo codigo. Este ultimo pensé que era el bueno, pero no hace la función rolling code, siempre transmite lo encriptado, pero siempre lo mismo. Pego debajo el codigo:

/*
*   Este codigo está modificado para que simule una transmision de una trama Rolling Code, simulando un control remoto con tecnología Keeloq. Muchas lineas no sirven para nada de momento y las eliminaré del codigo original. 
*   No realiza la función de cambio de codigo en cada transmisión. Solo envía varias veces el codigo de 64 bits definido en byte Buffer_Fix[4] y en unsigned long enc.
*   La duración de los pulsos es correcta y se han hecho pruebas con un receptor keeloq real. Al enviar el codigo correcto, el receptor obedece. Obviamente solo una vez.
*   Lo que se busca es una transmision que el receptor acepte y obedezca para lo cual la trama emitida por nuestro arduino, debe estar colocada en como el siguiente ejemplo:
*   2 F604BDA A4CBF45E donde 2 es el numero de canal, F604BDA es el numero de serie y A4CBF45E es la parte de codigo encriptado. Nosotros aquí lo estamos simulando y en vez de encriptar, enviaremos el resultado. 
*   
*/

#define TX 8 ////Data del TX al Pin 8 del arduino

#include <Keeloq.h>

byte CODE1[4]; // Paquete número 1
byte CODE[8]; // Paquete terminado
byte TCODE[8];
byte Key[7];

byte Buffer_Manufac[8] = {0x01, 0x02, 0x03, 0x04, 0x0A, 0x0B, 0x0C, 0x0D};///Como estamos simulando, esta clave creo que no se necesita.
byte Buffer_Fix[4] = {0xDA, 0x4B, 0x60, 0x2F};////Aquí pongo el numero de serie simulado invertido. Este se transmitiría 2F604BDA. El primer digito (2) es el canal
unsigned long key1 ,key2 ;


void setup()
{
Serial.begin(9600);
pinMode(TX, OUTPUT);

Key[0]=Buffer_Fix[0]^Buffer_Manufac[0];
Key[1]=Buffer_Fix[1]^Buffer_Manufac[1];
Key[2]=Buffer_Fix[2]^Buffer_Manufac[2];
Key[3]=((Buffer_Fix[3]&0x0F)|0x20 )^Buffer_Manufac[3];
Key[4]=Buffer_Fix[0]^Buffer_Manufac[4];
Key[5]=Buffer_Fix[1]^Buffer_Manufac[5];
Key[6]=Buffer_Fix[2]^Buffer_Manufac[6];
Key[7]=((Buffer_Fix[3]&0x0F)|0x60 )^Buffer_Manufac[7];

key1 = Key[0]; key1<<=8;
key1+= Key[1]; key1<<=8;
key1+= Key[2]; key1<<=8;
key1+= Key[3];
key2 = Key[4]; key2<<=8;
key2+= Key[5]; key2<<=8;
key2+= Key[6]; key2<<=8;
key2+= Key[7];

Keeloq k(key1,key2);


//unsigned long enc = k.encrypt(0xD3107D55);
unsigned long enc = (0x5EF4CBA4);/////Aquí pongo invertido lo que quiero que transmita como si fuese la parte encriptada. Esto lo transmite así, a continuacion del Numero de serie: A4CBF45E

// De esta manera lo que transmitimos es esto 2F604BDAA4CBF45E.  Así se ve en el serial monitor.


//Serial.print("After encrypt: ");
//Serial.println(enc,HEX);


CODE1[3]=enc; enc>>=8;
CODE1[2]=enc; enc>>=8;
CODE1[1]=enc; enc>>=8;
CODE1[0]=enc;

}

void loop()
{
CODE[0] = CODE1[0];
CODE[1] = CODE1[1];
CODE[2] = CODE1[2];
CODE[3] = CODE1[3];
CODE[4] = Buffer_Fix[0];
CODE[5] = Buffer_Fix[1];
CODE[6] = Buffer_Fix[2];
CODE[7] = Buffer_Fix[3];

Serial.print(CODE[7],HEX);

Serial.print(CODE[6],HEX);
Serial.print(CODE[5],HEX);
Serial.print(CODE[4],HEX);
//Serial.print ("  Encript  ");
Serial.print(CODE[3],HEX);
Serial.print(CODE[2],HEX);
Serial.print(CODE[1],HEX);
Serial.print(CODE[0],HEX);


Serial.println("");

for (int i=0; i<50; i++) {//Transmite 50 veces la misma trama 
SendKeeloq(CODE);
}
delay(5000);// Repite la tranmision completa cada 10 segundos.
}
void SendMeander(unsigned int meanderLen)
{
digitalWrite(TX, HIGH);
delayMicroseconds(meanderLen);
digitalWrite(TX, LOW);
delayMicroseconds(meanderLen);
}
// Keeloq ----------------------------------------------
void SendKeeloqPreambula()
{
for (byte i=0; i<11; i++)
SendMeander(400);
}

void SendKeeloq(unsigned char *TCODE)
{
signed char a;
SendKeeloqPreambula();
digitalWrite(TX, HIGH);
delayMicroseconds(400);
digitalWrite(TX, LOW);
delayMicroseconds(10*400);

for(a=0; a<66; a++)
{
digitalWrite(TX, HIGH);
delayMicroseconds(400);
if(TCODE[a/8]&(1<<(a%8))) digitalWrite(TX, LOW);
delayMicroseconds(400);
digitalWrite(TX, LOW);
delayMicroseconds(400);
}
delay(16);
}
//---------------------------------------------------------

Se parece a lo que yo quiero pero no cambia el codigo transmitido.

Lo que busco es algo como esto: Tu elijes el numero de serie y numero de fabricante, le aplica el algoritmo keeloq y lo transmite. Ello provoca que recibamos cada vez una parte del codigo diferente. Así:

Canal 2 Serie 57A18CA Rolling Code B46B586A
Canal 2 Serie 57A18CA Rolling Code 3289E1E2
Canal 2 Serie 57A18CA Rolling Code F5617E5B
Canal 2 Serie 57A18CA Rolling Code 85CBB827
Canal 2 Serie 57A18CA Rolling Code 6C2B7429
Canal 2 Serie 57A18CA Rolling Code 1456BF04
Canal 2 Serie 57A18CA Rolling Code 47E765A3
Canal 2 Serie 57A18CA Rolling Code ECDCE013

Codigo que programa un HCS301 con nuestros datos

Alguien tiene o sabe una url donde encontrar un código que te permita elegir numero de serie y clave de fabricante todo en arduino ??

Gracias y saludos

Hola Chicos/as.
Tras navegar por San Google por unos días, he visto lo difícil que es encontrar lo que buscaba. De hecho solo he conseguido encontrar un código que transmite, pero de momento solo lo mismo.

Me permite introducir la trama que quiero que transmita y así lo hace. De hecho el receptor, obedece...Solo una vez. Pero al menos ya soy capaz de activarlo, que para i no es poco de momento.
Para no llenar el tema de códigos, voy a editar y modificar el anterior.

No es mio, lo encontré y lo adapté... Me falta limpiar de lineas que no necesito de momento.

Ahora mismo, como está, transmite 16 dígitos HEX.

Mi siguiente paso, es hacer que transmita continuamente pero que los 8 dígitos de la derecha los cambie de forma random.

Tendré que comprobar con el receptor, cuantas tramas necesita para obedecer. Ahora le puesto 50 porque no sabía. Con 6 no eran suficientes y puse 50. Seguro que con menos también sirve.

Admito sugerencias de como modificar el código para que haga lo mismo pero variando random la mitad derecha del codigo.

Saludos.