Go Down

Topic: Código Rfid (Read 4 times) previous topic - next topic

jemogu

Hola:
       Soy un aficionado a los trenes a escala, y al conocer la placa Arduino, he visto la enorme ayuda que ofrece para la maqueta que trato de construir. Una de ellas es  el "rfid" que permitiría, si lo consigo, identificar los trenes, y en cada caso activar desvíos, encender luces  o cualquiera de las múltiples posibilidades que ofrece una maqueta.

       He comprado en Ebay a los chinos  un RFID de 125 KHz de la marca JSXZLZ y buscando por la red he localizado el código que os detallo a continuación, con unas  modificaciones añadidas por mí.  Pero tengo un problema, y es que con el código que os indico, consigo que se indique el número de tarjeta en el monitor serial y se encienda un led al pasar cualquier tarjeta, y lo que yo pretendo es poder encender un led distinto para cada tarjeta.

        Os ruego tengais a bien echarme una mano ya que mis conocimientos de informática son muy escasos.

saludos


// RFID reader for Arduino
// Wiring version by BARRAGAN <http://people.interaction-ivrea.it/h.barragan>
// Modified for Arudino by djmatic
// Re-Modified for Arduino and 125Khz JsxzLz RFID Kit from Ebay by Biohazard

// RFID reader comes with 11 pins: D3 D2 D1 Rest Mcst Gnd L1 L2 PC TX VCC
// We need these to be connected:
// Rest to Arduino pin 2
// Gnd to Arduino GND
// L1 and L2 to the antenna
// TX to Arduino RX0
// VCC To Arduino 5V

int  val = 0;
char code[14];
// 2 digits manufacture code
// 10 digits card code
// 2 digits parity bits

int bytesread = 0;
int led = 8;


void setup() {

  Serial.begin(9600);     // RFID reader TX pin, Baud rate: 9600, Data bits: 8, stop bit: 1.
  pinMode(2,OUTPUT);      // Set digital pin 2 as OUTPUT to connect it to the RFID RESET pin
  pinMode(led,OUTPUT);
  digitalWrite(2, HIGH);  // Activate the RFID reader



void loop() {

  if(Serial.available() > 0) {            // if data available from reader
    if((val = Serial.read()) == 10) {     // check for header
      bytesread = 0;
      while(bytesread < 14) {             // read 14 digit code
        if( Serial.available() > 0) {
          val = Serial.read();
          if((val == 10)||(val == 13)) {  // if header or stop bytes before the 10 digit reading
            break;                        // stop reading
          }
          code[bytesread] = val;          // add the digit           
          bytesread++;                    // ready to read next digit 
        }
      }
      if(bytesread == 14) {               // if 14 digit read is complete
        Serial.print("TAG code is: ");    // possibly a good TAG
        Serial.println(code);        // print the TAG code
        digitalWrite(led, HIGH);
    }
      bytesread = 0;
      digitalWrite(2, LOW);               // deactivate the RFID reader for a moment so it will not flood
      delay(1500);                        // wait for a bit
      digitalWrite(2, HIGH);              // Activate the RFID reader
       digitalWrite(led, LOW);
  }
  }
}

rlcobos


Hola

cambia

Serial.print("TAG code is: ");    // possibly a good TAG
        Serial.println(code);        // print the TAG code
        digitalWrite(led, HIGH);

por algo como.....

Serial.print("TAG code is: ");    // possibly a good TAG
        Serial.println(code);        // print the TAG code

if (code=="ELCODIGODEUNADETUSTARJETARFIDDEUNTREN")
{
        digitalWrite(led, HIGH);
}

if (code=="ELCODIGODEOTRADETUSTARJETARFIDDEUNTREN")
{
        digitalWrite(OTROPIN, HIGH);
}
   

jemogu

Code: [Select]
Gracias ricobos:

                        He hecho la prueba con los cambios que me indicas, el Monitor serial continua detallando los numeros de las tarjetas pero no se me enciende ninguno de los leds.

                         Te detallo el nuevo código utilizado:

[codeint  val = 0;
char code[14];
// 2 dígitos del código de fabricación
// 10 dígitos del código de tarjeta
// 2 dígitos bits de paridad
int bytesread = 0;
int ledrojo = 8;
int ledverde = 9;
int Rest = 2;


void setup() {

  Serial.begin(9600);     // RFID lector TX pin, Velocidad de transmisión: 9600, Bits de datos: 8, bit de parada: 1.
  pinMode(Rest,OUTPUT);      // Set 2 pin digital como OUTPUT para conectar con el pin RESET RFID
  pinMode(ledrojo,OUTPUT);
  pinMode(ledverde,OUTPUT);
  digitalWrite(Rest, HIGH);  // Activar el lector RFID



void loop() {

  if(Serial.available() > 0) {            // Si se dispone de datos de lector
    if((val = Serial.read()) == 10) {     // comprobar cabecera
      bytesread = 0;
      while(bytesread < 14) {             // leer 14 dígitos del código de
        if( Serial.available() > 0) {
          val = Serial.read();
          if((val == 10)||(val == 13)) {  // si el encabezado o dejar de bytes antes de la lectura de 10 dígitos
            break;                        // dejar de leer
          }
          code[bytesread] = val;          // añadir el dígito
          bytesread++;                    // listo para leer siguiente dígito
        }
      }
      if(bytesread == 14) {               // si tiene 14 dígitos de lectura se ha completado
        Serial.print("TAG code is: ");    // TAG posiblemente un buen
        Serial.println(code);        // imprimir el código de la etiqueta
       
        if (code == "5200043602820E")
        {
        digitalWrite(ledrojo, HIGH);
        }
        if (code == "4B001085431305")
        {
       
        digitalWrite(ledverde, HIGH);
        }
    }
      bytesread = 0;
      digitalWrite(Rest, LOW);               // desactivar el lector de RFID por un momento para que no se inunde
      delay(1500);                        // esperar un poco
      digitalWrite(Rest, HIGH);              // Activar el lector RFID
      digitalWrite(ledrojo, LOW);
      digitalWrite(ledverde, LOW);
  }
  }
}
]



rlcobos

yo le añadiría un

         
        if (code == "5200043602820E")
        {
        digitalWrite(ledrojo, HIGH);
                    Serial.println("ha pasado el tren 1");
        }
        if (code == "4B001085431305")
        {
                   Serial.println("ha pasado el tren 2");
        digitalWrite(ledverde, HIGH);
        }


y me cercioraría de que el compilador está pasando por alguna de éstas lineas de código,

si pasa por ellas ( se verá en el display ), el problema es de la activacion de las salidas ( leds ),

en caso contrario tienes algún problema con los códigos escritos en código.


Heke

De ahi a disponer de un sistema ASFA son dos pasos.

Te va a quedar cantidad de realista esas maquetas...

Siento no poder ayudarte con el RFID porque aun no lo he usado.
CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

Go Up