Clonar RFID con MC6300

Hola soy nuevo con arduino. Se me averió una llave RFID para la puerta de la urbanización y pensé que se podría duplicar con arduino. Resulta que la llave es de 125 Khz. He comprado un módulo MC3600 y conectándolo con arduino UNO consigo leer las ID de las llaves (version y TAG). Pero quiero hacer un duplicado para sustituir la llave defectuosa y no sé cómo hacerlo. Supongo que tendré que copiar en esas ID en una llave nueva, pero no encuentro información sobre cómo hacerlo, y si se puede. He buscado en el foro y en muchos videos, pero solo he conseguido ver otros que hacen lo mismo para las tarjetas de 13,56 Mhz con módulo RC522.
También tengo ese módulo y esas tarjetas, y con esas si puedo hacerlo, pero con las de 125 no he conseguido encontrar nada.

Agradezco de antemano cualquier ayuda.

Gracias

Hi,
Ajunto un link de una libraria para arduino que puedes usar para clonar tarjetas de RFID. Hechale un vistazo para ver si te sirve.

[rfid/examples/RFID-Cloner/RFID-Cloner.ino at master · miguelbalboa/rfid · GitHub]

Hola. Muchas gracias por responder. Pero esa librería no me vale. Eso es para llaves de 13,56 Mhz, con el módulo RC522. Ese tipo de llaves sí las he podido leer y escribir con el módulo RC522 conectado a arduino. Pero la que quiero duplicar es de 125 Khz. He conectado un módulo MC3600 a arduino y he conseguido leer las TAGs, pero no escribir en ellas para duplicar una (tengo una defectuosa y otra buena para abrir la puerta, y varias vacías para duplicar).
Este es el sketch que utilicé para leer:
#include <SoftwareSerial.h>

SoftwareSerial RDM6300(10, 11); // RX, TX

void setup() {
Serial.begin(9600); // Inicia la comunicación serial con el PC
RDM6300.begin(9600); // Inicia la comunicación serial con el RDM6300
}

void loop() {
static char buffer[15]; // Buffer para almacenar los bytes de la trama, tamaño 15 para incluir el carácter nulo final
static int index = 0; // Índice para saber dónde guardar el próximo byte

if (RDM6300.available()) {
int inByte = RDM6300.read(); // Lee el byte entrante
if (index < 14) { // Asegúrate de no desbordar el buffer
buffer[index++] = inByte; // Almacena el byte en el buffer
}

// Cuando el buffer esté lleno, imprime los datos
if (index == 14) {
  buffer[index] = '\0'; // Termina la cadena para asegurar que no se imprima basura
  printDecodedData(buffer); // Imprime los datos, incluyendo la conversión del tag y versión
  index = 0; // Restablece el índice para la próxima trama
}

}
}

// Función para imprimir los datos decodificados, excluyendo head y tail
void printDecodedData(char *buffer) {
// Convertir la versión de hexadecimal a decimal
char versionHex[3]; // Buffer para la versión de dos caracteres
versionHex[0] = buffer[1];
versionHex[1] = buffer[2];
versionHex[2] = '\0'; // Termina la cadena
long versionDecimal = strtol(versionHex, NULL, 16);
Serial.print("Version: "); Serial.print(versionDecimal);

// Convertir el tag de hexadecimal a decimal
char tagHex[9]; // Buffer para almacenar los 8 bytes del tag como cadena
for (int i = 0; i < 8; i++) {
tagHex[i] = buffer[i + 3]; // Copia los bytes del tag
}
tagHex[8] = '\0'; // Finaliza la cadena para conversión segura
long tagDecimal = strtol(tagHex, NULL, 16); // Convierte la cadena hexadecimal a un valor decimal
Serial.print(", Tag: "); Serial.print(tagDecimal);

Serial.println(); // Salto de línea al final
}

Si alguien puede orientarme... quizás sea solo cambiando el código, o puede que además tenga que cambiar la conexión.