Hola amigos, tengo un problema con el código que estoy trabajando, se trata de un simple lector de tarjetas rfid de 125khz, específicamente el lector ID-20, cuando trato de que lea el código de mi token, no me arroja nada en la pantalla Serial. SI alguien me pudiera ayudar se los agradecería bastante.
Este es el código:
#include <SoftwareSerial.h>
#include <Bridge.h>
SoftwareSerial rfid(2,3); // RX,TX (el TX no se usa)
void setup() {
Serial.begin(9600);
rfid.begin(9600);
Bridge.begin();
while (!Serial);
Serial.print("Procesos iniciados.");
}
void loop()
{
while(rfid.available()) {
byte i = 0;
byte val = 0;
byte code[6];
byte checksum = 0;
byte bytesread = 0;
byte tempbyte = 0;
Serial.print("Listo para leer");
if((val = rfid.read()) == 2) { // check for header
bytesread = 0;
while (bytesread < 12) { // read 10 digit code + 2 digit checksum
if( rfid.available() > 0) {
val = rfid.read();
if((val == 0x0D)||(val == 0x0A)||(val == 0x03)||(val == 0x02)) { // if header or stop bytes before the 10 digit reading
break; // stop reading
}
// Do Ascii/Hex conversion:
if ((val >= '0') && (val <= '9')) {
val = val - '0';
} else if ((val >= 'A') && (val <= 'F')) {
val = 10 + val - 'A';
}
// Every two hex-digits, add byte to code:
if (bytesread & 1 == 1) {
// make some space for this hex-digit by
// shifting the previous hex-digit with 4 bits to the left:
code[bytesread >> 1] = (val | (tempbyte << 4));
if (bytesread >> 1 != 5) { // If we're at the checksum byte,
checksum ^= code[bytesread >> 1]; // Calculate the checksum... (XOR)
};
} else {
tempbyte = val; // Store the first hex digit first...
};
bytesread++; // ready to read next digit
}
}
// Output to Serial:
if (bytesread == 12) { // if 12 digit read is complete
Serial.print("5-byte code: ");
for (i=0; i<5; i++) {
if (code[i] < 16) Serial.print("0");
Serial.print(code[i], HEX);
Serial.print(" ");
}
Serial.println();
Serial.print("Checksum: ");
Serial.print(code[5], HEX);
Serial.println(code[5] == checksum ? " -- passed." : " -- error.");
Serial.println();
}
bytesread = 0;
}
delay(1000);
}
}