Arduino Forum

International => Español => Software => Topic started by: clemenlg on Jul 18, 2019, 11:47 am

Title: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Jul 18, 2019, 11:47 am
Hola,
tengo un problema con un lector de chips RFID FDX-B (los chips que llevan las mascotas).
(https://forum.arduino.cc/index.php?action=dlattach;topic=394980.0;attach=163792)
Estoy usando un sensor de Priority 1 Design (RFIDRW-E-TTL), con el cual me puedo comunicar por TTL.
Tengo un documento pdf con la especificación de la placa (http://www.priority1design.com.au/rfidrw-e-ttl.pdf), pero lo máximo que he llegado es a comunicarme con ella.
Llevo más de 1 año peleándome con ella, retomando el proyecto y abandonándolo varias veces por desesperación.
Uso SoftwareSerial para comunicarme, y llego a hacerlo porque el método available() me devuelve un valor, pero no logro leer ningún chip.
El problema es mío, que no tengo los conocimientos de electrónica, y me estoy liando con lo que voy leyendo, así que al final he decidido a abrir un hilo para ver si alguien me echa una mano.
Uso una placa Arduino nano, por lo que los pins RX y TX que admiten interrupciones de cambio son: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI). Yo uso el 8 y 9 (tal y como se ha comentado en otro hilo (https://forum.arduino.cc/index.php?topic=394980.0)).
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=316821)
Según los comandos que puedo usar, el comando RAT debería leer una etiqueta FDX-B (uso el método visto en otros hilos similares (https://forum.arduino.cc/index.php?topic=379408.0)), pero le ponga o no el chip cerca de la antena, me devuelve basura todo el rato.
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=316823)
Code: [Select]

#include <SoftwareSerial.h>

#define rxPin 8
#define txPin 9

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

void setup(){
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  RFID.begin(9600);    // start serial to RFID reader
  Serial.begin(9600);  // start serial to PC
}

void loop(){
  if (RFID.available() > 0){
    RFID.print("RAT");
    RFID.write(13);
    setime = millis();
    while(millis() - setime < 1000){
      while (RFID.available()) {
        byte C = RFID.read();
        Serial.println(C);
      }
    }
  }

¿Alguien me echa una mano?
Gracias
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: surbyte on Jul 18, 2019, 01:35 pm
Hola @clemenlg empiezo a leer el pdf y me encuentro con la posibilidad de usar uart 5V o 3.3V.
Creo que por decir que usas el TTL hablas de 5V, no es cierto?
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Jul 18, 2019, 02:00 pm
Hola @clemenlg empiezo a leer el pdf y me encuentro con la posibilidad de usar uart 5V o 3.3V.
Creo que por decir que usas el TTL hablas de 5V, no es cierto?
Hola @surbyte,
sí, cierto, se me olvidó comentarlo. El V+ lo tengo conectado a 5V, y el V- a GND.
Por cierto, he intentado seleccionar el tipo de etiqueta (FDX-B) con el comando ST2, y luego intentar leerlo con RAT, y sigo leyendo basura sin sentido...
Code: [Select]

    RFID.print("ST2");
    delay(100);
    RFID.print("RAT");
    delay(100);

    for (int z = 0 ; z < 15 ; z++) // son 15 números
      Serial.print(RFID.read());
    Serial.println("");
    RFID.flush();

Muchas gracias por tu tiempo.
Saludos
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: surbyte on Jul 18, 2019, 03:11 pm
Dame un momento que entienda como es el proceso de arranque del lector pero en principio no estoy de acuerdo con la forma en que has planteado el codigo en el loop. Seria el mismo pero con otra disposicion.
Ej:  envias el RAT y luego escuchas la respuesta del lector.

Describe las conrxiones entre arduino y lector.

8 a que esta conectado
9 idem
Que mas?
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Jul 18, 2019, 04:08 pm
Dame un momento que entienda como es el proceso de arranque del lector pero en principio no estoy de acuerdo con la forma en que has planteado el codigo en el loop. Seria el mismo pero con otra disposicion.
Ej:  envias el RAT y luego escuchas la respuesta del lector.

Describe las conrxiones entre arduino y lector.

8 a que esta conectado
9 idem
Que mas?
Las conexiones de la placa que uso (y la relación con mi arduino nano) son:
RX ->9
TX ->8
V+ ->5V
V- ->GND
A+ ->Antena
A- ->Antena

Primero hago un "ST2" para decirle que voy a leer una etiqueta FDX-B, y luego con "RAT" le digo que lea una etiqueta.
Sólo debería hacer una vez ST2, lo podría hacer en el setup, pero como estoy haciendo pruebas, lo he dejado en el loop, para forzar así ese modo en cada interacción del bucle.
Gracias de nuevo.
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: surbyte on Jul 18, 2019, 09:40 pm
Intenta con esta aplicacion (http://www.priority1design.com.au/download.html) que es para PC. Programa el arduino como interfaz rs232 a serial TTL.  Si todo funciona correctamente vemos que ocurre.
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Jul 18, 2019, 11:15 pm
Hola,
Soy muy novato en Arduino, ¿Necesito un conversor usb a ttl para hacer lo que comentas? Como esto: https://satkit.com/cp2102-conversor-usb-serial-ttl-arduino (https://satkit.com/cp2102-conversor-usb-serial-ttl-arduino)
Saludos
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Jul 19, 2019, 10:07 am
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:
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=316983)
Code: [Select]

#include <SoftwareSerial.h>

#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:
Code: [Select]

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:
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=316985)
Comando LTG:
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=316987)
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... :smiley-confuse:
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: surbyte on Jul 19, 2019, 01:18 pm
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

Code: [Select]
#include <SoftwareSerial.h>

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.
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Jul 20, 2019, 10:43 am
Pongo el código corregido para usar Arduino como el conversor usb-ttl:
Code: [Select]

#include <SoftwareSerial.h>

#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"
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=317100)
¿Puede ser esto? Ya no sé qué más mirar...
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Jul 22, 2019, 09:37 am
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 (https://forum.arduino.cc/index.php?topic=394980.0), y no difiere del mío, pero no entiendo el error:
(https://forum.arduino.cc/index.php?action=dlattach;topic=394980.0;attach=294957)
(https://forum.arduino.cc/index.php?action=dlattach;topic=394980.0;attach=294955)
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: surbyte on Jul 23, 2019, 02:43 am
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.
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Jul 23, 2019, 12:01 pm
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.
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: surbyte on Jul 23, 2019, 03:14 pm
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.
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Jul 24, 2019, 10:47 am
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:
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=316985)
Le envío SD2, y luego un salto de línea, y debería devolver un OK, pero devuelve un 0:
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=316983)
Por lo que me estoy comunicando correctamente con la placa, pero en cambio, sigue sin entender mis comandos.
Code: [Select]

#include <SoftwareSerial.h>

#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:
(http://www.asciitable.com/index/asciifull.gif)
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":
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=317633)
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: surbyte on Jul 24, 2019, 03:20 pm
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?
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Jul 24, 2019, 05:17 pm
Sí, se me olvidó comentarlo. Mismo resultado que la prueba anterior. :(
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Jul 26, 2019, 10:07 am
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? :smiley-confuse: No parece difícil el código de quien sí lo ha logrado hacer funcionar (https://forum.arduino.cc/index.php?topic=253703#msg1894294), 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):
Code: [Select]

// include the library code:
#include <Wire.h>
#include <Adafruit_MCP23017.h>
#include <Adafruit_RGBLCDShield.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
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.
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: surbyte on Jul 26, 2019, 03:06 pm
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?
Quote
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.
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Jul 27, 2019, 10:34 am
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í:
Code: [Select]

#include <SoftwareSerial.h>

#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:
Code: [Select]

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:
Code: [Select]

  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é.
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: surbyte on Jul 27, 2019, 02:11 pm
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.
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Jul 27, 2019, 11:34 pm
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:
Code: [Select]

#include <SoftwareSerial.h>

#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:
Code: [Select]

#include <SoftwareSerial.h>

#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:
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=318005)
Si el montaje y el código están bien, ¿el problema sería del IDE? :smiley-confuse:
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. :smiley-eek-blue:
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Jul 28, 2019, 10:13 am
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.
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=318037)
Código:
Code: [Select]

#include <SoftwareSerial.h>

#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:
Code: [Select]

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.
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: surbyte on Jul 28, 2019, 03:14 pm
Lo mas importante es que esto

Code: [Select]
SoftwareSerial RFID = SoftwareSerial(rxPin, txPin); //RX, TX

esta mal definido, debe ser asi

Code: [Select]
SoftwareSerial RFID(rxPin, txPin); //RX, TX
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Jul 28, 2019, 06:28 pm
Sí, era una prueba. Definido correctamente tampoco funciona.
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Jul 29, 2019, 10:02 am
Bueno, cambiando los puertos, he logrado comunicarme desde Arduino Uno a Arduino Mega y viceversa.
Código de Uno:
Code: [Select]

//Para Arduino Uno
#include <SoftwareSerial.h>

/*
 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):
Code: [Select]

#include <SoftwareSerial.h>
//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):
Code: [Select]

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... :(
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: surbyte on Jul 29, 2019, 03:00 pm
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.
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Jul 29, 2019, 08:01 pm
Hola,
uso SoftwareSerial porque mi objetivo es que este proyecto funcione en un Arduino Nano, y como el Nano no tiene HardwareSerial, emulo un serial por software, para que así el proyecto sea lo más parecido posible a mi objetivo final.
Con Serial1 también lo he probado, y el resultado es el mismo.
Ya les he pedido ayuda a los de Priority 1, estoy a la espera de que me contesten.
Código que he usado para probar con HardwareSerial en Arduino Mega 2560 (he comprobado la disponibilidad del Serie1 antes de cada acomunicación):
Code: [Select]

int newtag[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int data1 = 0;
unsigned long setime;

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

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

Y me da el error de comando no entendido:
Code: [Select]

OK SD2
OK READ SD2
0
OK LTG
OK READ LTG
0
OK RAT
OK READ RAT
000000000000000

Lo único que se me ocurre probar mientras estoy a la espera de respuesta del fabricante, es alimentar el Arduino Mega 2560 con la misma fuente que la placa (transformador de 6v), por el pin VIN (creo que este es el de entrada), pero no sé si tendré algún conflicto al estar alimentado también por USB (para ver el monitor serie). En teoría esto no afecta para nada, pero no sé...
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Jul 30, 2019, 10:23 am
El fabricante ya me ha contestado, y me ha dicho:
Code: [Select]

Hello,
 
I don't really write Arduino code so I can't analyse it for you.
 
The first thing to do is make sure the reader is reading.  Disconnect the arduino from the reader, and connect a led to the L+, L- terminals (vith a 1k resistor in series), then scan a FDXB/HDX animal tag. The LED should flash once when the tag comes close to the antenna.  MAke sure this is happening.
 
Then use a TTL to USB cable to connect up to a PC and use a dumb terminal program like TERMITE to send commands and see responses.  A carriage return sent should responde with ?0.
 
Do this first to make sure the reader is operating correctly. Then get back to me.
 
Regards,

He probado con el led, y no se enciende (si lo conecto a V+ y V- sí que va), por lo que no está leyendo las etiquetas. Lo he probado en 2 lectores de RFID distintos (uno de ellos lo abrí hace unos días).
Estoy a la espera de que el fabricante me diga algo.
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=318355)
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: surbyte on Jul 30, 2019, 02:20 pm
Por eso al comienzo te dije una posibilidad era conseguir un adapator USB a TTL de los que se usan para programar Arduinos o Nodemcu (ESP8266) y usar el programa de Priority1 para ver si funciona.
Evidentemente algo pasa con la placa o las placas.

Perdona la pregunta tal vez tonta.. Has mirado la salida de la fuente DC? Dijiste que eran como 10V pero prueba ponerla en AC a ver si mide algo. Lo correcto es que no mida nada o valores de AC muy bajos. Solo para descartar.
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Jul 30, 2019, 04:03 pm
Esta es la fuente:
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=318405)
Si conecto el led a otros pins de la placa RFID (v+ y v-) se enciende:
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=318407)
Y se puede ver como da voltaje:
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=318411)
El voltaje, evidentemente, es más bajo que el que da la fuente sin nada conectado:
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=318409)
Esta es la lectura del multimetro con AC seleccionado (es bajo el voltaje):
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=318413)
Yo también creo que algo pasa con la placa, de hecho ya lo hablamos, aunque siempre están dentro de una jaula de Faraday. De las 3 placas que tengo, sólo estaba usando una, cuando dudé de si el problema era la placa, abrí otra placa (la bolsa de Faraday donde estaba), y fue esta la que soldé al Nano, con idéntico resultado.
Pero es muy raro que 2 placas que he probado, las 2 tengan un problema. Aún me queda otra por abrir, pero preferiría dejarla así, hasta averiguar el problema.
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: surbyte on Jul 30, 2019, 05:40 pm
3.94 voltios en AC? Si eso que leo es asi, esa fuente es una porquería

No puedes tener casi 4 voltios en AC, apenas unos mV o como máximo 100mVAC

Asi que busca otra fuente porque tal vez tenga dañado un diodo del puente o mal filtrado.
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Jul 31, 2019, 09:28 am
3.94 voltios en AC? Si eso que leo es asi, esa fuente es una porquería

No puedes tener casi 4 voltios en AC, apenas unos mV o como máximo 100mVAC

Asi que busca otra fuente porque tal vez tenga dañado un diodo del puente o mal filtrado.
Ya he conseguido una nueva fuente que no tiene salida de AC:
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=318528)
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=318530)
Con esta fuente el led conectado a L+ y L- siempre está encendido, pero en cambio, no parpadea al acercarle una etiqueta RFID, que es el comportamiento que debería tener según el fabricante.
El fabricante me contestó:
Code: [Select]
measure the voltage on the RX and TX line.  Make sure they do not go over +5V.
 
Measure the voltage at the regulator output here. where the arrow shows +5V.  Makes sure its a steady 5V
 
If you have a frequency meter check the frequency at point TP shown on the left of the image.
It should have a square wave output of about 134khz more or less. If not then the antenna is not connected correctly.
Sometimes clients solder onto the red enamal of the wire is is an insulation layer.
If you don't have a freequency meter then check the resistance of the coil across A+, A- (with unit switched off)
 
In its default state the voltage at L+ should be about 3.5V, is it?  L- will be close to 0V.
 
If you put your finger on the CPU (square chip (top middle) it should not be hot,  it should be cool, is it?

Puntos que marcó:
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=318536)
Me comentó que mirara la salida de RX y TX:
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=318532)
¿No debería ser de 3.3v par que Arduino la pueda leer bien?
El regulador de potencia da 5v en el punto en el que pide la lectura (no puedo adjuntar la imagen porque da error de seguridad la imagen -aunque cambie formato, ...-).
Con respecto a la soldadura de la antena, está soldada a la parte pre-estañada, no a la parte roja aislada:
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=318538)
La resistencia entre A+ y A- me da 0 (no sé si lo he medido bien):
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=318534)
Y el voltaje en el punto V+ es de 5.00, y en V- 0.00 (ya no puedo adjuntar más imágenes).
La placa continúa sin estar disponible (método available devuelve 0), pero en cuanto le pongo una etiqueta RFID, empieza a devolver valores.
Código dentro del loop (Arduino Nano):
Code: [Select]

  if (RFID.available() > 0){
    Serial.println("OK SD2");
    //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))0x0d
    delay(500);
  }
  else
    Serial.println("KO SD2");
  if (RFID.available() > 0){
    Serial.println("OK READ SD2");
    Serial.println(RFID.read());
    delay(500);
  }
  else
    Serial.println("KO READ SD2");
  if (RFID.available() > 0){
    Serial.println("OK LTG");
    //RFID.print(F("LTG"));
    RFID.write(0x4c);
    RFID.write(0x54);
    RFID.write(0x47);
    RFID.write(0x0d);//crn->carriage return (en decimal 13: RFID.write(13))
    delay(500);
  }
  else
    Serial.println("KO LTG");
  if (RFID.available() > 0){
    Serial.println("OK READ LTG");
    Serial.println(RFID.read());
    delay(500);
  }
  else
    Serial.println("KO READ LTG");
  if (RFID.available() > 0){
    Serial.println("OK RAT");
    //RFID.print("RAT");
    RFID.write(0x4d);
    RFID.write(0x4f);
    RFID.write(0x46);
    RFID.write(0x0d);
    delay(500);
  }
  else
    Serial.println("KO RAT");
  if (RFID.available() > 0){
    Serial.println("OK READ RAT");
   
    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
   
   
    /*RFID.write(0x4d);
    RFID.write(0x4f);
    RFID.write(0x46);
    //RFID.print("RAT");
    RFID.write(0x0d);
    setime = millis();
    while(millis() - setime < 1000){
      while (RFID.available()) {
        byte C = RFID.read();
        Serial.print(C);
      }
    }
    Serial.println("");*/

/*     char dataChar = RFID.read();
     Serial.println(dataChar);*/
  }
  else
    Serial.println("KO READ RAT");
  delay(1000);

Resultado mostrado por Serial:
Code: [Select]

KO SD2
KO READ SD2
KO LTG
KO READ LTG
KO RAT
KO READ RAT
KO SD2
KO READ SD2
KO LTG
KO READ LTG
KO RAT
KO READ RAT
OK SD2
OK READ SD2
54
OK LTG
OK READ LTG
52
OK RAT
OK READ RAT
519548564848484848525055535513
OK SD2
OK READ SD2
79
OK LTG
OK READ LTG
75
OK RAT
OK READ RAT
137975134951534648137975136349
OK SD2
OK READ SD2
13
OK LTG
OK READ LTG
49
OK RAT
OK READ RAT
515346481379751354525195485648
OK SD2
OK READ SD2
48
OK LTG
OK READ LTG
48
OK RAT
OK READ RAT
484852505553551379751349515346
OK SD2
OK READ SD2
49
OK LTG
OK READ LTG
13
OK RAT
OK READ RAT
797513797513495153464913797513
OK SD2
OK READ SD2
79
OK LTG
OK READ LTG
75
OK RAT

No tiene sentido, ya que siempre debería estar disponible, y debería devolver el código correspondiente en cada caso.
Sólo está disponible cuando le pongo una etiqueta cerca, y a partir de entonces, tenga o no etiqueta cerca, siempre está mostrando valores (entiendo que basura, ya que la etiqueta es 643080000042757).
Obtengo el mismo resultado usando HardwareSerial (Serial1) en Arduino Mega 2560.
Actualización:
El fabricante me ha respondido:
Code: [Select]

There's a RX,TX  on connector J1  which has 0-5V ttl level serial,,   and
there's a Rx and TX on connector J2 which has 3.3V level serial.

If your arduino is running from 5V supply then use the signals on J1.  If its
running on a 3.3V supply then use the signals on J2.


The antenna resistance looks odd.  Disconnect the antenna and measure it
directly.

You don't need a bigger supply as the reader draws less than 80mA.

Yo tengo el RX y TX en el J1. Había leído que en el TTL de Arduino las señales deben funcionar a 3.3V ¿Es correcto? Si es así, ese podría ser el problema.
Con respecto a la medición de la resistencia de la antena, midiendo otra antena que aún no tengo soldada, y poniendo el multímetro en 60M (Ω), me sigue dando 0.
Mi multímetro:
(https://images-na.ssl-images-amazon.com/images/I/7199w0VxbML._SL1500_.jpg)
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: surbyte on Jul 31, 2019, 04:56 pm
Una antena es una bobina y cuando pruebas continuidad con todos desconectado deberias leer muy baja resistencia entre un punto y el otro. Medidos desde A+ y A- para asegurarte que esta todo bien.
Veo que eso has leido asi que asegurate que no tienes un corto y desconecta un terminal digamos en la antena que asegure que si estas midiendo el loop de la bobina.

No se porque hablas de 3.3V si tu Arduino es un NANO o un UNO y usan TTL a 5V. La parte de 3.3V dejala para otro tipo de Arduino que no sean NANO o UNO.
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Aug 15, 2019, 12:34 pm
Después de 1 semana sin Internet, al llegar a casa me encontré con que ya me había llegado el conversor USB-TTL (CP2102).
Al probarlo, obtuve lo siguiente (sólo con acercarle la etiqueta):
Code: [Select]

clemenlg# cu -l /dev/ttyUSB0 -s 9600
Connected.
643_080000042757

La leyó sin problemas (me parece raro que la lea sin tener que pasarle ningún comando).
Usé la nueva placa que aún no había abierto, y le soldé los pins para prototipado, ya que con ella estero hacer más pruebas.
La alimentación la obtuve del CP2102, por lo que se alimenta con 5V perfectamente (ya que ha leído correctamente la etiqueta).
Código de prueba de Arduino:
Code: [Select]

void loop(){
  if (RFID.available() > 0){
    Serial.println("OK");
    Serial.println(RFID.read());
  }
  else
    Serial.println("KO");
  delay(1000);
}

Obtengo como resultado lo siguiente:
Code: [Select]

OK
54
OK
52
OK
51
OK
95
OK
48
OK
56
OK
48
OK
48
OK
48
OK
48
OK
48
OK
52
OK
50
OK
55
OK
53
OK
55
OK
13

Que es la etiqueta que he leído antes con cu desde el ordenador, pero cada carácter en hexadecimal.
Este es el mismo resultado tras hacer un casting a char (Serial.println((char)RFID.read());)
Code: [Select]

OK
6
OK
4
OK
3
OK
_
OK
0
OK
8
OK
0
OK
0
OK
0
OK
0
OK
0
OK
4
OK
2
OK
7
OK
5
OK
7
OK
KO

Una vez que ha leído la etiqueta devuelve toda la cadena, independientemente de si está o no disponible la etiqueta en la antena. El método available de SoftwareSerial sólo devuelve true cuando paso la etiqueta, no antes, por lo que no me puede servir esto para enviarle ningún comando, ya que siempre devolverá false hasta que le pase la etiqueta. :smiley-confuse:
Pero este comportamiento lo he probado en los otros montajes que tenía, y en todos funciona correctamente (nunca había probado a leer del SoftwareSerial sin enviar previamente algún comando).
El problema del envío de comandos sigue siendo el mismo, no puedo enviar ningún comando y que me lo acepte, por lo que no he avanzado nada en la comunicación con la placa, sólo he descubierto que es capaz de leer sin pasarle previamente ningún comando, en cambio, tanto con la aplicación del fabricante, como con el software que indicó para comunicarse por TTL la comunicación es correcta:
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=320518)
Con esto descarto los posibles problemas de hardware, así como confirmo que funciona tal y como la documentación indica. El problema es 100% de Arduino, o bien el cableado (creo que no, ya que es muy sencillo), o en el código.
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: surbyte on Aug 15, 2019, 02:13 pm
Quote
Pero este comportamiento lo he probado en los otros montajes que tenía, y en todos funciona correctamente (nunca había probado a leer del SoftwareSerial sin enviar previamente algún comando).
Y no te había dicho que asi debias hacerlo? mira para atras en el post#3 mi primer respuesta.

El manual dice que debes enviarle un comando para que el lector responda. Eso es previo a esperar la respuesta.
Ahora que por lo menos responde, se puede encontrar el camino adecuado para que todo fluya mejor.

Esa captura con Termite no la puedes repetir usando Arduino?
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Aug 15, 2019, 06:33 pm
Sí, eso lo hicimos una vez que te conectaste, pero no funcionó esa vez.
Ahora soy capaz de enviarle algunos comandos, y que me responda, como "RAT" o "LTG":
Code: [Select]

#include <SoftwareSerial.h>

#define rxPin 8
#define txPin 9

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

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

void loop(){
  String temp="";
  int i = -1;
  if (RFID.available() > 0){
    Serial.println("Disponible");

    temp.concat((char)RFID.read());
    if (temp != "?" && temp != "O") //if is not a command response, is significant data
      i++;

    while (RFID.available() > 0){
      temp.concat((char)RFID.read());
      if (i < 0){
        Serial.print("Respuesta: ");
        Serial.println(temp);
        temp = "";
      }
      i++;      
    }
    Serial.println(temp);
    temp="";
  }
  else{
    Serial.println("No disponible");
    RFID.print(F("RAT"));
    RFID.write(13);
  }
  delay(1000);
}

Y devuelve:
Code: [Select]

No disponible
Disponible
Respuesta: ?1


Disponible
643_080000042758

No disponible
Disponible
643_080000042758_1_0_464F_000000

No disponible
Disponible
643_080000042758_1_0_464F_000000

No disponible
Disponible
Respuesta: ?1


No disponible
Disponible
Respuesta: ?1

Sí que lo lee, falta pulir el código, pero otros comandos, como WAT, no van, aunque siga al mismo ejemplo que en la documentación: RFID.print(F("WAT999_000000001007_1_0")).
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Aug 16, 2019, 09:52 am
He logrado escribir tanto con la aplicación del desarrollador:
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=320634)
Como con el emulador de RS232:
(https://forum.arduino.cc/index.php?action=dlattach;topic=626974.0;attach=320636)
Así que he copiado el comando, y también funciona la escritura:
Code: [Select]

#include <SoftwareSerial.h>

#define rxPin 8
#define txPin 9

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

String temp="";

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

void loop(){
  int i = -1;
  if (RFID.available() > 0){
    Serial.println("Disponible");

    temp.concat((char)RFID.read());
    if (temp != "?" && temp != "O") //if is not a command response, is significant data
      i++;

    while (RFID.available() > 0){
      temp.concat((char)RFID.read());
      if (i < 0){
        Serial.print("Respuesta: ");
        Serial.println(temp);
        temp = "";
      }
      i++;     
    }
    Serial.println(temp);
    temp="";
  }
  else{
    Serial.println("No disponible");
    //RFID.print(F("RAT"));
    RFID.print(F("WAT643_080000042750_1_000000_2"));
    RFID.write(13);
  }
  delay(1000);
}

Salida:
Code: [Select]

No disponible
Disponible
Respuesta: ?2

643_080000042759

No disponible
No disponible
Disponible
Respuesta: ?
?0

No disponible
Disponible
Respuesta: ?0

?2
643_080000042750

No disponible
Disponible
Respuesta: ?2


La respuesta ?2 que da es porque no ha podido escribir la etiqueta.
Title: Re: Problema con lector RFID (FDX-B) de Priority 1 Design
Post by: clemenlg on Aug 19, 2019, 11:42 am
Bueno, doy por cerrado el hilo (por mi parte).
Este es el código final para una simple lectura:
Code: [Select]

#include <SoftwareSerial.h>

#define rxPin 8
#define txPin 9

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

String showRfidError(int nErr){
  switch (nErr){
    case 0:
      return "Command not understood";
    case 1:
      return "Tag not present";
    case 2:
      return "Tag failure to Read/Write";
    case 3:
      return "Access to Block 0 not allowed";
    case 4:
      return "Page address invalid for this tag";
    default:
      return "Unrecognized error";
  }
}

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

void loop(){
  String temp="";
  int i = -1;
  if (RFID.available() > 0){
    temp.concat((char)RFID.read());
    if (temp != "?" && temp != "O") //if is not a command response, is significant data
      i++;
    while (RFID.available() > 0){
      temp.concat((char)RFID.read());
      if (i < 0){
        if (temp.charAt(1) == 'K')
          Serial.println("Function Performed Successfully");
        else{
          Serial.println(showRfidError(temp.charAt(1)-'0'));
        }
        temp = "";
      }
      i++;
    }
    Serial.println(temp);
    temp="";
  }
  else{
    RFID.print(F("RAT"));
    //RFID.print(F("WAT643_080000042750_1_000000_2"));
    RFID.write(13);
  }
  delay(1000);
}

Las conexiones finalmente son:
Arduino Nano             RFIDRW-E-TTL
=======================
        8                            TX (J1)
        9                            RX (J1)
        5V                          V+ (J1)
        GND                        V- (J1)
                               Led entre L+ y L- con
                          una resistencia de 1k en serie

Muchas gracias a @surbyte por toda la ayuda prestada.