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.