Problema con lector RFID (FDX-B) de Priority 1 Design

Creo que el problema es que no soy capaz de enviar correctamente los comandos al lector. Al enviar comandos me devuelve 0, que según la tabla de errores es que no ha entendido el comando: |500x178

#include 

#define rxPin 8
#define txPin 9

SoftwareSerial RFID = SoftwareSerial(rxPin, txPin); //RX, TX

void setup(){
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  RFID.begin(9600);
  Serial.begin(9600);
}

void loop(){

  if (RFID.available() > 0){
    Serial.println("OK");
    //RFID.print(F("SD2")); Envío el comando SD2 para indicar que por defecto son chips FDX-B, lo envío en hexadecimal para asegurarme
    RFID.write(0x53);
    RFID.write(0x44);
    RFID.write(0x32);
    delay(500);
    Serial.println(RFID.read());
    //RFID.print(F("LTG")); Envío el comando LTG para saber si hay una etiqueta presente en el lector, lo envío en hexadecimal para asegurarme
    RFID.write(0x4c);
    RFID.write(0x54);
    RFID.write(0x47);
    delay(500);
    Serial.println(RFID.read());
    RFID.print(F("RAT")); //; Envío el comando RAT para leer un chip FDX-B
    
    for (int z = 0 ; z < 15 ; z++) // lee los 15 caracteres
    {
      data1 = RFID.read();
      newtag[z] = data1;
      Serial.print(data1);
    }
    Serial.println("");
    RFID.flush(); // vacía
  }
  else
    Serial.println("KO");
  delay(1000);

Y este es el resultado de la ejecución del código anterior:

OK
0 <- Comando no entendido
255 <- ¿?
002550025500000000255 <- ¿basura?
OK
0 <- Comando no entendido
0 <- Comando no entendido
24002540000025500002550 <- ¿basura?
OK
0 <- Comando no entendido
0 <- Comando no entendido
00025500025300024802550 <- ¿basura?
OK
0 <- Comando no entendido
0 <- Comando no entendido
200002552550001000252 <- ¿basura?
OK
0 <- Comando no entendido
0 <- Comando no entendido
255025500000002540000 <- ¿basura?
OK
0 <- Comando no entendido
0 <- Comando no entendido
00-1-1-1-1-1-1-1-1-1-1-1-1-1 <- ¿basura?
KO

Comando SDx: |500x185 Comando LTG: |500x162 No entiendo el problema, y no pueden ser los baudios porque lo tengo a 9600, tal y como se indica: Serial protocol description:The protocol for the Serial Input and Output lines is 9600 Baud, 8 data bits, 1 stop bit, no parity.. ¿Hay algún problema con que tanto Serial como el lector usen 9600 baudios? Ya no sé qué puede ser... :confused:

error_codes.png|865x309

default_transponder.png|874x325

ltg.png|910x295

No te respondo acerca de lo que has mostrado porque parece que la placa no esta respondiendo debidamente. Me cuesta escribir codigos con la tablet

#include 

SoftwareSerial mySerial ( 8 , 9) ; // RX, TX 

void setup ( ) { 
  // Abra las comunicaciones serie y espere a que se abra el puerto: 
  Serie . comenzar ( 9600 ) ; 
  while ( ! Serial ) { 
    ; // espera a que el puerto serial se conecte. Necesario solo para puerto USB nativo 
  } 


  Serial.println ( "Conversor de serial!" ) ; 

  // establecer la velocidad de datos para el puerto de SoftwareSerial
  mySerial. beguin ( 9600 ) ; 
  mySerial. println ( "comando" ) ; 
} 

void loop ( ) { // se ejecuta una y otra vez 
  if ( mySerial. available ( ) ) { 
    Serial.write ( mySerial.read( ) ) ; 
  } 
  if (Serial .available ( ) ) {
    mySerial.write ( Serial.read( ) ) ; 
  } 
}

Este codigo usa al arduino como ese conversor que encontraste. Pero ahora puedes probar diferentes velocidades.

Pongo el código corregido para usar Arduino como el conversor usb-ttl:

#include 

#define rxPin 8
#define txPin 9

SoftwareSerial RFID = SoftwareSerial(rxPin, txPin); //RX, TX

void setup(){ 
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  Serial.begin(9600);  // start serial to PC
  while (!Serial){
    ; // espera a que el puerto serial se conecte. Necesario solo para puerto USB nativo
  }
  RFID.begin(9600);    // start serial to RFID reader
} 

void loop(){ // se ejecuta una y otra vez 
  if(RFID.available()) {
    Serial.write(RFID.read());
  }
  if(Serial.available()) {
    RFID.write(Serial.read());
  }
}

Si uso esta aplicación, me da un error: "Check reader connection and power". He montado otro arduino nano con otra placa RFIDRW-E-TTL, esta vez, soldando todo, y nada, el resultado es el mismo. Con una hardware totalmente nuevo, descarto problemas de hardware. Estoy pensando si el problema es de alimentación, ya que yo alimento la placa con el puerto 5V de Arduino nano, y el Arduino nano lo alimento con el USB conectado al pc. Viendo la documentación de la placa, debería funcionar, aunque pone: "+5.5 to 15V DC" |500x297 ¿Puede ser esto? Ya no sé qué más mirar...

conector_j1.png|862x513

En el hardware que tengo todo soldado RFID.available() siempre me devuelve 0, es decir, nunca está disponible el dispositivo TTL. En el que tengo con cables de prototipado pinchados a la protoboard, algunas veces me devuelve 0, pero entiendo porque hay algún tipo de mala conexión (por eso decidí soldar otro arduino nano a otra placa de RFID). Lo que no tiene ningún sentido es que en esta versión soldada nunca esté disponible la placa RFID por TTL. También he probado con un arduino mega 2560 que tengo, usando los cables de prototipado, y el resultado es el mismo, me aparece como no disponible el TTL. Estoy haciendo algo MUY mal, pero aún no he detectado el qué. He visto el montaje de otros usuarios, y no difiere del mío, pero no entiendo el error: |374x500 |500x375

Por lo visto estas alimentando mal la placa RFID.

Si dice 5.5 a 15 pues busca una funte de al menos 6 a 12V, comparte GND con el Arduino y repite las pruebas.

Sí, eso pensaba, que estaba falta de potencia, pero si miras los hilos que he enlazado, lo usan cogiendo los 5v de Arduino, y funciona, por lo que no entiendo porqué ellos sí lo logran hacer funcionar (y yo no). Buscaré una fuente de 6v para probar, pero me surge una duda, como lo alimentaré con esta fuente, ya no podré alimentar Arduino con el usb, sino que tendré que hacerlo con esta fuente, para así compartir gnd también. ¿Podré seguir conectando el usb para ver la salida serial? O ¿Alimento Arduino por usb y esta placa por la fuente externa y comparto gnd (el de la fuente o el de Arduino) para ambos? Como veis, soy bastante novato con esto de la electrónica...

The Arduino Nano can be powered via the Mini-B USB connection, 6-20V unregulated external power supply (pin 30), or 5V regulated external power supply (pin 27). The power source is automatically selected to the highest voltage source.

The FTDI FT232RL chip on the Nano is only powered if the board is being powered over USB. As a result, when running on external (non-USB) power, the 3.3V output (which is supplied by the FTDI chip) is not available and the RX and TX LEDs will flicker if digital pins 0 or 1 are high.

Alimentas laplaca con una fuente externa y arduino por USB, no pasa nada, solo compartes GND con la placa y las lineas del puerto serie que trabajan a la tensión adecuada. Tranquilo que todo es correcto.

surbyte: Alimentas laplaca con una fuente externa y arduino por USB, no pasa nada, solo compartes GND con la placa y las lineas del puerto serie que trabajan a la tensión adecuada. Tranquilo que todo es correcto.

Usando una fuente de alimentación externa de 6v y 500mAh, conectando el positivo a la entrada V+ de la placa RFID, y el negativo al V- de la placa RFID y al GND del Arduino, ya me devuelve siempre un valor positivo el método available del SoftwareSerial, es decir, ya reconoce siempre que hay "algo" por TTL, pero en cambio, todos los comandos me devuelven 0 ("Command not understood"). Todas las pruebas las hago ahora con el hardware soldado, evitando así problemas de malos contactos.

En teoría está claro un simple comando: |500x185 Le envío SD2, y luego un salto de línea, y debería devolver un OK, pero devuelve un 0: |500x178 Por lo que me estoy comunicando correctamente con la placa, pero en cambio, sigue sin entender mis comandos.

#include 

#define rxPin 8
#define txPin 9

SoftwareSerial RFID = SoftwareSerial(rxPin, txPin); //RX, TX

int newtag[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // used for read comparisons
int data1 = 0;

void setup(){
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  Serial.begin(9600);  // start serial to PC
  while (!Serial){
    ; // espera a que el puerto serial se conecte. Necesario solo para puerto USB nativo
  }
  RFID.begin(9600);    // start serial to RFID reader
}

void loop(){
  if (RFID.available() > 0){
    Serial.println("OK");    
    RFID.print(F("SD2"));
    /*RFID.write(0x53);
    RFID.write(0x44);
    RFID.write(0x32);*/
    RFID.write(0x0d);//crn->carriage return (en decimal 13: RFID.write(13))
    delay(1000);
    Serial.println(RFID.read());
    RFID.print(F("LTG"));
    /*RFID.write(0x4c);
    RFID.write(0x54);
    RFID.write(0x47);*/
    RFID.write(13);//crn->carriage return (en decimal 13: RFID.write(13))
    delay(1000);
    Serial.println(RFID.read());
    RFID.print(F("RAT"));
    delay(1000);
    
    for (int z = 0 ; z < 15 ; z++) // read the rest of the tag
    {
      data1 = RFID.read();
      newtag[z] = data1;
      Serial.print(data1);
    }
    Serial.println("");
    RFID.flush(); // stops multiple reads
  }
  else
    Serial.println("KO");
  delay(1000);
}

Si en vez de enviar el comando como cadena (convertida haciendo casting), lo envío en hexadecimal, el resultado es el mismo (código comentado). Y si en vez de enviar el salto de línea en decimal, lo envío en hexadecimal, el resultado sigue siendo el mismo (código comentado). Tabla ASCII: |500x341 Se me acaban las ideas, no entiendo ya el problema que puede pasar... Así es como lo tengo, las partes fijas soldadas, y la fuente conectada de manera "temporal": |500x281

proyecto_soldado_temporal_6v_foro.png|2000x1125

has probado lo que yo te sugerí antes, usar el Arduino como una interfaz entre una terminal de la PC y el módulo RFID?

Sí, se me olvidó comentarlo. Mismo resultado que la prueba anterior. :(

Me acaba de llegar el arduino uno que compré, para probar, pero el resultado es el mismo. No me lee por TTL, de hecho, con el hardware en el que uso cables de protoboard conectado al UNO, el método available no me devuelve nunca un valor positivo. Lo he probado alimentando de 5v del UNO, así como haciéndolo desde una fuente externa. ¿Tan torpe seré que todos lo consiguen fácilmente y yo no puedo? :confused: No parece difícil el código de quien sí lo ha logrado hacer funcionar, de hecho, otros le dan las gracias porque con ese código les lee la etiqueta. Este es el código que les funciona (a parte, muestra el código en una pantalla LCD):

// include the library code:
#include 
#include 
#include 
#include 
#include 
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();
#define WHITE 0x7 //set the backlight colour
SoftwareSerial RFID(2, 3); //pin2 Rx, pin3 Tx

int CMD[64];
int comlen = 0;
int out_flag = 0;

void setup()
{
  Serial.begin(9600);
  lcd.begin(16, 2); // set up the LCD's number of columns and rows:
  RFID.listen();
  Serial.println("Tag number will be displayed here if detected by the module:\n");
  lcd.print("Your tag No is:");
  lcd.setCursor(0, 1); //place cursor on 2nd row for tag number

  RFID.begin(9600); // set the data rate for the RFID reader
  delay(10);

}
void loop()

{

  while (Serial.available())
  {
    int a = SerialReadHexDigit();
    if (a >= 0) {
      CMD[comlen] = a;
      comlen++;
    }
    delay(10);
  }

  for (int i = 0; i < comlen; i += 2) {
    int c = RFID.write( CMD[i] * 16 + CMD[i + 1]);
  }
  comlen = 0;

  while (RFID.available()) {
    byte C = RFID.read();
    //if (C<16) Serial.print("0"); //Future use for tags with less numbers
    Serial.write(C);  //Display tag number on serial bus in human form
       
    lcd.write(C);     //Display tag number on LCD
   
    //Serial.print(" "); //Puts space between each digit on Serial Monitor
    out_flag = 1;
  }
  if (out_flag > 0) {
    Serial.println();
    out_flag = 0;
    lcd.setCursor(0, 1);
  }
}
int SerialReadHexDigit()
{
  byte c = (byte) Serial.read();
  if (c >= '0' && c <= '9') {
    return c - '0';
  } else if (c >= 'a' && c <= 'f') {
    return c - 'a' + 10;
  } else if (c >= 'A' && c <= 'F') {
    return c - 'A' + 10;
  } else {
    return -1;   // getting here is bad: it means the character was invalid
  }
}

Sólo me queda por pensar que ellos no estén leyendo chips de animales (FDX-B), aunque me parece raro, ya que es la principal diferencia de este lector.

Hola Clemente. He leído el manual de la placa y no encontré nada que se nos pasara. Lo único que voy a decirte aunque suene a locura, es que inviertas los pines RX y TX ya que en ningún momento has leído algo como respuesta de la placa es raro que esto suceda. Siempre se lee algo. Lo unico que recibes es 00000 que para colmo no esta documentado o no he visto que significa.

Se me ocurren dos cosas: 1 que busques una interfaz TTL a USB para probarlo con el programa de Priority1 y te sacas la duda si funciona o no y la 2da es que los consultes a ellos para iniciar una guia de cómo resolver el problema.

Esto funciona asi?

Additionally the peripheral control outputs allow a duel color led, and buzzer to be used to give audio and visual PASS indications when a transponder comes within reading range.

surbyte: Hola Clemente. He leído el manual de la placa y no encontré nada que se nos pasara. Lo único que voy a decirte aunque suene a locura, es que inviertas los pines RX y TX ya que en ningún momento has leído algo como respuesta de la placa es raro que esto suceda. Siempre se lee algo. Lo unico que recibes es 00000 que para colmo no esta documentado o no he visto que significa.

Se me ocurren dos cosas: 1 que busques una interfaz TTL a USB para probarlo con el programa de Priority1 y te sacas la duda si funciona o no y la 2da es que los consultes a ellos para iniciar una guia de cómo resolver el problema.

Esto funciona asi?

Lo de intercambiar RX y TX ya lo hice hace tiempo, y no funciona. Se me ha ocurrido hacer un programa simple, el cual sólo con Arduino (quitando el RFID), y conectando RX y TX al mismo pin, intente escribir y leer de él. Es algo muy sencillo, sólo pruebo la comunicación TTL escribiendo y leyendo del mismo pin, para comprobar si soy capaz de mantener una comunicación por TTL. El código sería así:

#include 

#define rxPin 8
#define txPin 8

SoftwareSerial RFID = SoftwareSerial(rxPin, txPin); //RX, TX

void setup(){
  Serial.begin(9600);  // start serial to PC
  RFID.listen();
  RFID.begin(9600);    // start serial to RFID reader
  delay(10);
}

void loop(){
  if(RFID.available()) {
    Serial.println("OK->RAT");
    RFID.print(F("RAT"));
  }
  else
    Serial.println("KO->RAT");
  delay(500);
  if(RFID.available()) {
    Serial.println("OK->read");
    Serial.println(RFID.read());
  }
  else
    Serial.println("KO->read");
  delay(1000);
}

En Arduino no debería tener nada conectado, y debería poder mandar el texto y luego mostrarlo por el serial, ¿no? Pues si lo anterior es correcto, algo tengo mal, porque nunca me da un valor positivo en el available(). El resultado de la ejecución es:

KO->RAT
KO->read
KO->RAT
KO->read
KO->RAT
KO->read
KO->RAT
KO->read
KO->RAT
KO->read

Si simplifico el código mucho más, eliminando las comprobaciones de available del loop, es decir, dejando en el loop sólo:

  RFID.print("RAT");
  Serial.println(RFID.read());

El resultado siempre es -1 (lógico, no comprueba si está disponible o no el TTL). Si todo lo comentado anteriormente es correcto, algo hago muy mal, pero sigo sin saber qué.

Ya que tienes varios NANOs porque no usas el código en el que uno envia y el otro recibe y comuncas dos NANOs y te sacas la duda bien no con lo que has probado que no se hasta que punto esta bien.

Dos NANOs con GND compartido, RX a TX del otro y lo mismo con los otros cables.

Abres dos IDEs y con los dos monitores Serie cuando envies algo debería recibirlo el otro y viceverza. Eso SI O SI debe funcionar, y si no lo hace, algo puede estar mal en alguna librería o en tu IDE pero es muy raro.

surbyte: Ya que tienes varios NANOs porque no usas el código en el que uno envia y el otro recibe y comuncas dos NANOs y te sacas la duda bien no con lo que has probado que no se hasta que punto esta bien.

Dos NANOs con GND compartido, RX a TX del otro y lo mismo con los otros cables.

Abres dos IDEs y con los dos monitores Serie cuando envies algo debería recibirlo el otro y viceverza. Eso SI O SI debe funcionar, y si no lo hace, algo puede estar mal en alguna librería o en tu IDE pero es muy raro.

Bueno, pues he hecho la prueba, y salvo fallo mío con el montaje o con el código, debo tener algún problema con los IDE, pero es raro, porque otros montajes me funcionan correctamente (como sensores de UVB, ...). He conectado dos Arduinos, un Nano y un Uno. Código del Arduino Uno:

#include 

#define rxPin 2
#define txPin 3

SoftwareSerial RFID = SoftwareSerial(rxPin, txPin); //RX, TX

void setup(){
  Serial.begin(9600);  // start serial to PC
  RFID.listen();
  RFID.begin(9600);    // start serial to RFID reader
  delay(10);
}

void loop(){
  if(RFID.available()) {
    Serial.println("Enviando desde Uno");
    RFID.print("Hola desde Uno");
  }
  else
    Serial.println("KO hola Uno");
  delay(500);
  if(RFID.available()) {
    Serial.println("Recibiendo desde Nano");
    Serial.println(RFID.read());
  }
  else
    Serial.println("KO recibiendo desde Nano ");
  delay(1000);
}

Código del Arduino Nano:

#include 

#define rxPin 8
#define txPin 9

SoftwareSerial RFID = SoftwareSerial(rxPin, txPin); //RX, TX

void setup(){
  Serial.begin(9600);  // start serial to PC
  RFID.listen();
  RFID.begin(9600);    // start serial to RFID reader
  delay(10);
}

void loop(){
  if(RFID.available()) {
    Serial.println("Enviando desde Nano");
    RFID.print("Hola desde Nano");
  }
  else
    Serial.println("KO hola Nano");
  delay(500);
  if(RFID.available()) {
    Serial.println("Recibiendo desde Uno");
    Serial.println(RFID.read());
  }
  else
    Serial.println("KO recibiendo desde Uno");
  delay(1000);
}

No puedo tener los 2 monitores serie a la vez en dos IDE distintos, porque al cambiar el puerto en uno me lo cambia también en el otro, no obstante, debería ser capaz de recoger los datos enviados desde el otro Arduino. Las conexiones son GND con GND y RX de uno con TX de otro y viceversa. Adjunto foto: |500x281 Si el montaje y el código están bien, ¿el problema sería del IDE? :confused: Uso el IDE de Arduino 1.8.2 sobre GNU/Linux (Ubuntu), aun así, he arrancado un portátil con Windows 7 y he instalado el último IDE (1.8.9), he subido los códigos, y el resultado es el mismo. :fearful:

montaje_nano_uno_ttl.jpg|3840x2160

He vuelto a probar lo mismo, pero esta vez desde el Arduino Nano al Arduino Mega 2560, con el mismo código. Comparto GND entre ambos, y el RX de uno va al TX del otro y viceversa. |500x281 Código:

#include 

#define rxPin 2
#define txPin 3

SoftwareSerial RFID = SoftwareSerial(rxPin, txPin); //RX, TX

void setup(){
  Serial.begin(9600);  // start serial to PC
  RFID.listen();
  RFID.begin(9600);    // start serial to RFID reader
  delay(10);
}

void loop(){
  if(RFID.available()) {
    Serial.println("Enviando desde Uno");
    RFID.print("Hola desde Uno");
  }
  else
    Serial.println("KO hola Uno");
  delay(500);
  if(RFID.available()) {
    Serial.println("Recibiendo desde Nano");
    Serial.println(RFID.read());
  }
  else
    Serial.println("KO recibiendo desde Nano ");
  delay(1000);
}

Resultado:

KO hola Uno
KO recibiendo desde Nano 
KO hola Uno
KO recibiendo desde Nano 
KO hola Uno
KO recibiendo desde Nano 
KO hola Uno
KO recibiendo desde Nano 
KO hola Uno
KO recibiendo desde Nano 
KO hola Uno
KO recibiendo desde Nano 
...

Es decir, no da available nunca. He hecho esta prueba porque quería descartar problemas de usar un arduino chino (el nano), usando 2 Arduinos originales y nuevos. También he de descartar problema de IDE, así como de SO, ya que lo he probado en dos equipos nuevos, y con dos IDES distintos (incluso distintas versiones). También he eliminado de la ecuación la protoboard, conectando directamente los Arduino, por si fuera problema de mala conexión de la misma, e incluso los cables de prototipado.

ttl_uno_mega.jpg|3840x2160

Lo mas importante es que esto

SoftwareSerial RFID = SoftwareSerial(rxPin, txPin); //RX, TX

esta mal definido, debe ser asi

SoftwareSerial RFID(rxPin, txPin); //RX, TX

Sí, era una prueba. Definido correctamente tampoco funciona.

Bueno, cambiando los puertos, he logrado comunicarme desde Arduino Uno a Arduino Mega y viceversa. Código de Uno:

//Para Arduino Uno
#include 

/*
 Not all pins on the Mega and Mega 2560 support change interrupts,
 so only the following can be used for RX:
 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69

 Not all pins on the Leonardo support change interrupts,
 so only the following can be used for RX:
 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

 Not all pins on the Nano support change interrupts,
 so only the following can be used for RX:
 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI)
 */

#define rxPin 10
#define txPin 11

SoftwareSerial RFID(rxPin, txPin); //RX, TX

void setup(){
  Serial.begin(9600);  // start serial to PC
  //RFID.listen(); // No existe en Hardware
  RFID.begin(9600);    // start serial to RFID reader
  Serial.println("Empezando en el Uno.");
  RFID.println("Empezando en el Uno.");
  delay(10);
}

void loop(){
  
  if(RFID.available()) {
    Serial.println("Enviando desde Uno");
    RFID.write("Hola desde Uno");
  }
  else
    Serial.println("KO hola Uno");
  delay(500);
  if(RFID.available()) {
    Serial.println("Recibiendo desde Mega");
    Serial.println(RFID.read());
  }
  else
    Serial.println("KO recibiendo desde Mega ");
  delay(1000);
}

Código de Mega (el mismo pero con otros prints):

#include 
//Para Arduino Mega 2560

/*
 Not all pins on the Mega and Mega 2560 support change interrupts,
 so only the following can be used for RX:
 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69

 Not all pins on the Leonardo support change interrupts,
 so only the following can be used for RX:
 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

 Not all pins on the Nano support change interrupts,
 so only the following can be used for RX:
 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI)
 */

#define rxPin 10
#define txPin 11

SoftwareSerial RFID(rxPin, txPin); //RX, TX

void setup(){
  Serial.begin(9600);  // start serial to PC
  //RFID.listen(); // No existe en Hardware
  RFID.begin(9600);    // start serial to RFID reader
  Serial.println("Empezando en el Mega.");
  RFID.println("Empezando en el Mega.");
  delay(10);
}

void loop(){
  if(RFID.available()) {
    Serial.println("Enviando desde Mega");
    RFID.write("Hola desde Mega");
  }
  else
    Serial.println("KO hola desde Mega");
  delay(500);
  if(RFID.available()) {
    Serial.println("Recibiendo desde Uno");
    Serial.println(RFID.read());
  }
  else
    Serial.println("KO recibiendo desde Uno");
  delay(1000);
}

Y la salida de uno de los dos (en este caso el Uno):

Enviando desde Uno
Recibiendo desde Mega
72
Enviando desde Uno
Recibiendo desde Mega
72
Enviando desde Uno
Recibiendo desde Mega
72
Enviando desde Uno
Recibiendo desde Mega
72

No sé muy bien que es 72, supongo que será la cadena "Hola desde Mega" con otra codificación. Una vez probado este código, si lo adapto para la placa RFID, sigue sin funcionar... :(

Y porque sigues usando SofwareSerial en el MEGA teniendo 4 puertos?

En el MEGA no uses SoftwareSerial. Usa cualquiera de los puertos Hardware disponibles Serial1, Serial2 y/o Serial3.

Es mas yo limitaría las pruebas a solo el MEGA con la placa, usando Serial para ver en el Monitor y Serial1 para comunicarme con la placa. Ya se que diras que no funciona pero ese es otro tema.

Yo intentaría pedir ayuda al soporte de Priority1 porque hay algo que no vemos.