Bom dia pessoal,

Eu estou testando um módulo de rfid (125khz) com cartões de proximidade do tipo (0010499953), diferente de algumas tags (2C4548E523). Uso o código abaixo:

#include <SoftwareSerial.h>

SoftwareSerial rfidReader(2, 3); //Pin 2 - RX /Pin 3 - TX
char c= 0; // value read for serial port

void setup() {
Serial.begin(9600); //setup the Serial speed
rfidReader.begin(9600); //setup the Rfid reader speed
}

void loop () {

if (rfidReader.available() > 0) {

c = rfidReader.read(); // read from the serial port
Serial.print(c); // Use Serial.write(c) for IDE 1.0 and print it to the monitor 
}

}

Toda vez que faço a leitura e observo o valor do Serial Monitor, aparecem caracteres como "YYYYYYYYYY" "255255255255255255255255255..." mas nunca aparecem os códigos que estão gravados no cartão.

Ja usei as variáveis do tipo, long, unsigned long...Mas nao aparecem os numeros como estao gravados no cartão.

Alguém poderia me ajudar?

Exibições: 2624

Responder esta

Respostas a este tópico

Sugiro você fazer o seguinte

void loop() 

{

while (rfidReader.available())

{

c = rfidReader.read(); // read from the serial port
Serial.print(c); // Use Serial.write(c) for IDE 1.0 and print it to the monitor 

}

}

Aparece assim após passar o cartão.

Olá,

eu uso leitores rfid em meus projetos, e o modelo que eu tenho envia os códigos em hexadecimal, assim tenho que converte-los para aparecer o número que está gravado na etiqueta. Talvez seja isso que está acontecendo com você.

Eu nao tenho nenhum cartão em HEXA, apenas em DEC mesmo. Nao sei se devo converter algum valor para depois mostrar no Serial Monitor. Voce poderia compartilhar sua conversão de hexa para dec?

Obrigado!

Um exemplo de conversão que eu fiz, lembrando que esse bloco de código é para PIC, mas dá pra ter uma idéia de como fazer para o arduino.

if(i==0x02 ){       //Testa se o valor recebido é 0x02 , esse valor indica o inicio do código
tl=1;
contaid = 0;
i=0;
}
if(tl == 1){   // Testa se o valor 0x02 já foi recebido indicando o inicio do código
if(contaid > 2){
if(i==0x30)Usart_Write('0');    //Testa se o valor recebido é 0x30, se sim envia o valor 0 pela serial
if(i==0x31)Usart_Write('1');
if(i==0x32)Usart_Write('2');
if(i==0x33)Usart_Write('3');
if(i==0x34)Usart_Write('4');
if(i==0x35)Usart_Write('5');
if(i==0x36)Usart_Write('6');
if(i==0x37)Usart_Write('7');
if(i==0x38)Usart_Write('8');
if(i==0x39)Usart_Write('9');
if(i=='A')Usart_Write('A');
if(i=='B')Usart_Write('B');
if(i=='C')Usart_Write('C');
if(i=='D')Usart_Write('D');
if(i=='E')Usart_Write('E');
if(i=='F')Usart_Write('F');
}

Eu uso esse código para converter, e funciona perfeitamente, lembrando que você tem que ver qual format de dados você está trabalhando, Wiegand ou serial, esse código é para serial (9600bps,N,8,1).

Qual leitor RFID está usando?

Olá David,

Eu uso um módulo semelhante a este:

Esse  que eu utilizo, portanto a saída do código é em hexadecimal, veja um exemplo do código:

Exemplo:Número do cartão: 62E3086CED 

Dados de saída:36H,32H,45H,33,30H,38H,36H,43H,45H,44H

A saída total é 0x02 + 10 caracteres ASCII + checksum + 0x03

Então David, os meus cartões são em decimal. Mesmo a entrada ser decimal, será necessário a conversão para hex?

Sim precisa da conversão, pois as tags e cartões possuem o código escrito em decimal, mas o leitor responde com o código em hexadecimal, veja o datasheet desse modulo, nele possui o formato de comunicação

Datasheet RDM6300

Vou testar como ficaria a função para conversão deste módulo.

David, eu nao sou mto bom em programação, principalmente com as strings e variáveis mais complexas que usam nos codigos de RF. Voce poderia me auxiliar em como faria a conversão?

Boa noite pessoal, ainda to neste problema... Alguem ja passou por isso?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço