Bom dia, este é meu primeiro post no forum, e venho pedir ajuda se alguém já tiver feito algo parecido ou puder ajudar de alguma forma.
Tenho neste momento um modulo RFID UART RDM630 em mãos e pretendia escrever um codigo que permitisse identificar um cartao de forma a permitir ou não o acesso do mesmo.
Após algumas pesquisas consegui elaborar ate agora o seguinte codigo:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); //pin2 Rx, pin3 Tx
byte data[5];
int val = 0;
void setup()
{
Serial.begin(9600);
Serial.write(0x??); //Header
Serial.write(0x??); //Reserved
Serial.write(0x??); //Length (Command + Data)
Serial.write(0x??); //Command (0x87 sets auto mode behavior
Serial.write(0x??); //Data 1: Enable Auto-Read
Serial.write(0x??); //Data 2: Mode – Parity decoded – Manchester RF/64
Serial.write(0x??); //Data 3: Total number of block to be read (2)
Serial.write(0x??); //Data 4: No password expected
Serial.write(0x??); //Data 5: Password byte 1
Serial.write(0x??); //Data 6: Password byte 2
Serial.write(0x??); //Data 7: Password byte 3
Serial.write(0x??); //Data 8: Password byte 4
Serial.write(0x??); //Checksum
delay(500);
Serial.flush();
Serial.println();
Serial.println("Modulo RFID pronto! Aguarda passagem do cartão...");
}
void loop()
{
val = Serial.read();
while (val != 0x29)
{
val = Serial.read();
delay(1000);
}
//we already read the header (0xff)
Serial.read(); // reserved
Serial.read(); // length
Serial.read(); // command (indicates tag data)
data[0] = Serial.read(); // we read data 1
data[1] = Serial.read(); // we read data 2
data[2] = Serial.read(); // we read data 3
data[3] = Serial.read(); // we read data 4
data[4] = Serial.read(); // we read data 5
Serial.read(); // checksum
// Indentifica RFID Card
Serial.print("Card found - Code: ");
for (int i = 0; i<5; i++)
{
if (data < 16) Serial.print("0");
_ Serial.print(data*, HEX);_
_ }_
_ Serial.println();_
_}_
_---------------------------------------------*_ A duvida persiste no facto de não conseguir obter os valores correctos para colocar no serial.write que seria o ID do cartao(acho eu) Ainda estou no inicio por isso ainda não percebo muito mas agradecia alguma ajuda Cumps
Entre outras coisas também não acho isto correcto:
delay(500);
Serial.flush();
Serial.println();
Serial.println("Modulo RFID pronto! Aguarda passagem do cartão...");
Para quê ai o flush?
Sabes o significado do flush?
Como o Bubulindo te disse tu criaste a serie virtual mas falas com o teu leitor RFID pela serie nativa.Assim sendo presuponho que o teu leitor RFID esta na serie nativa tu fazes o teu debug na virtual.Dai para que enviares para o modulo -> Serial.println("Modulo RFID pronto! Aguarda passagem do cartão...");
Lamento mas ele nao te percebe
val = Serial.read();
while (val != 0x29)
{
val = Serial.read();
delay(1000);
}
Se nao sabes se tens dados para ler porque tentas ler?
Vamos supor que até chegou um byte com valor de 0x29, nao entras no while e começas a ler tudo como se ja tivesses tudo no buffer.Pois mas isso nao é verdade ja que esses bytes inda nao chegaram ...
Logo isto:
//we already read the header (0xff)
Serial.read(); // reserved
Serial.read(); // length
Serial.read(); // command (indicates tag data)
data[0] = Serial.read(); // we read data 1
data[1] = Serial.read(); // we read data 2
data[2] = Serial.read(); // we read data 3
data[3] = Serial.read(); // we read data 4
data[4] = Serial.read(); // we read data 5
Serial.read(); // checksum
Muito provavelmente nao vai dar em nada
Tens de entender que o cpu é mais rapido do que a comunicaçao serie e portanto tentares ler a serie como se todos os bytes ja la estejam é errado
antes de mais agradeço a vossa disponibilidade para ajudarem... realmente o my serial não estará lá a fazer nd
como disse ainda estou num nivel muito basico lol o flush para ser honesto retirei de outro exemplo de codigo de RFID mas nao sei o que faz ao certo.
Neste caso:
val = Serial.read();
while (val != 0x29)
{
val = Serial.read();
delay(1000);
}
O valor até pode nao ser 29 mas segundo o que li o primeiro byte(header) será sempre o mesmo nos cartões dai a condição para ele so entrar se for detectado o byte correspondente( neste caso meti 29 mas só sabendo o ID do cartao e que consigo fazer isso)
Não sei se me estou a explicar bem? ou talvez esteja a complicar....