Hola, es la primera vez que escribo en el foro, así que disculpad si cometo algún error en el post o dónde localizarlo.
Llevo poco con Arduino. En este proyecto estoy utilizando un RC522 (módulo RFID) en Arduino UNO. En cuanto al programa no estoy teniendo problema, pero quiero aumentar la distancia de lectura al máximo, creo que rondará los 5 cm. El problema es que no estoy pudiendo cambiar el valor de la ganancia.
Según el datasheet (https://www.nxp.com/docs/en/data-sheet/MFRC522.pdf) en la tabla 9.3.3.6 de la página 59 habría que cambiar el valor del byte RFCfgReg. Esto no se como hacerlo, supongo que usando la función void PCD_WriteRegister(byte reg, byte value); pero no sé utilizarla.
Por otra parte, veo en Github que se implementó una función para hacerlo directamente, pero no sé porque no consigo implementarla. Aquí está el post: Adding AttennaOff and get/set of AntennaGain by mdxs · Pull Request #47 · miguelbalboa/rfid · GitHub
Este es el código que tengo ahora:
#include <require_cpp11.h>
#include <MFRC522.h>
#include <deprecated.h>
#include <MFRC522Extended.h>
#include <SPI.h>
#define RST_PIN 9
#define SS_PIN 10
MFRC522 mfrc522(SS_PIN, RST_PIN);
int i;
int r;
void setup() {
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
}
byte ActualP1[4];
byte Llavero[4]={0xD5,0xA7,0x63,0xA3};
byte Tarjeta[4]={0xB6,0x3B,0x18,0x25};
void loop() {
if(r==0){
Serial.println("Acreque la tarjeta");
Serial.println(r,HEX);
r++;
}
if(mfrc522.PICC_IsNewCardPresent()){
Serial.println("Leyendo tarjeta. Espere por favor.");
mfrc522.PICC_ReadCardSerial();
Serial.println("El codigo de la tarjeta es:");
for(i=0; i<mfrc522.uid.size; i++){
Serial.print(mfrc522.uid.uidByte[i], HEX);
ActualP1[i]=mfrc522.uid.uidByte[i];
}
Serial.println();
Serial.println("Tarjeta ledia con exito");
Serial.println("El codigo introducido es:");
for(i=0; i<4; i++){
Serial.print(ActualP1[i],HEX);
}
Serial.println();
}
if(compare(Llavero,ActualP1)){
Serial.println("Clave correcta");
digitalWrite(6,HIGH);
digitalWrite(5,LOW);
}else{
Serial.println("Clave incorrecta");
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
}
}
boolean compare(byte array1[],byte array2[])
{
if(array1[0] != array2[0])return(false);
if(array1[1] != array2[1])return(false);
if(array1[2] != array2[2])return(false);
if(array1[3] != array2[3])return(false);
return(true);
}
A ver si alguien puede echarme una mano y ayudarme a implementar la ganancia al máximo, que en este caso serían los 48db.
Muchas gracias!