Aumentar ganancia en RC522 RFID

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!

mfrc522.PCD_SetAntennaGain(112); // set to max (00001110)

Ponlo después de PCD_init()

Gracias harkonnen, esto lo he probado y sí consigo variar algo la potencia de la antena, pero MUY poco. Es decir, a 000 no funciona si lo vas subiendo aumenta la distancia, y a 112, que es el máximo, se queda en 1 cm. Según tenía entendido estos dispositivos permitían hasta 5 cm.

¿Me podríais recomendar un sensor similar pero que permita leer hasta unos 10 cm? Gracias.

Bueno, en mi caso si que consigo unos 5cm. con el máximo. Estoy usando un tag de esos azules para el llavero. Dependerá también del tipo de antena del tag. Pero estos tag no están pensados para distancias mucho más largas. Tendrías que irte a otros tipos de rfid, de 125khz o así que permiten distancias más largas.
No tengo experiencia con esos, lo siento.
Por cierto, el valor de la ganancia ocupa los bit 5,6 y 7 del registro por lo que admite 8 valores, del cero al 7. Los valores que metas a la función hay que multiplicarlo por 16, o rotar 4 veces a la izquierda, por eso 112(7x16) es el máximo, 0 no detecta tarjetas y 16 es el mínimo.
Saludos