UNIR RFID RC522 Y NRF24L01

BUENAS NOCHES ESTOY TRATANDO DE HACER FUNCIONAR UN RFID RC522 Y UN NRF24L01 EN UN ARDUINO NANO ,PERO LOS DOS USAN SPI,HE TRATADO DE USAR PRIMERO EL RFID Y LUEGO DESACTIVARLO Y ACTIVAR EL NRF PARA PODER ENVIAR LOS DATOS HACIA OTRO NRF. AQUI DEJO EL CODIGO ALGUIEN QUE PUEDA DARME UNA MANITO,GRACIAS DE ANTEMANO

EMISOR

#include <SPI.h>
#include <printf.h>
#include <RF24.h>
#include <MFRC522.h>
#define RST_PIN  9    //Pin 9 para el reset del RC522
#define SS_PIN  10   //Pin 10 para el SS (SDA) del RC522
MFRC522 mfrc522(SS_PIN, RST_PIN); ///Creamos el objeto para el RC522
RF24 radio(7,8); // CE, CSN
const byte address[6] = "00001";
byte ActualUID[4]; //almacenará el código del Tag leído
  byte Usuario1[4]= {48, 78, 21,124} ; //código del usuario 1
  char Usuario2[4]= {0x20, 0xC2, 0x4D, 0x80} ; //código del usuario 2

void setup() {
  

   Serial.begin(9600);
                 
}

void loop() {

  SPI.begin();        //Iniciamos el Bus SPI
  mfrc522.PCD_Init(); // Iniciamos el MFRC522
  
  //mfrc522.PICC_HaltA();    
// Revisamos si hay nuevas tarjetas  presentes
  if ( mfrc522.PICC_IsNewCardPresent()) 
        {  
            if ( mfrc522.PICC_ReadCardSerial()) 
            {   Serial.print(F("Card UID:"));
                  for (byte i = 0; i < mfrc522.uid.size; i++) {
                          //Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
                          Serial.print(mfrc522.uid.uidByte[i]);  
                          //Serial.print(mfrc522.uid.uidByte[i], HEX);  
                          ActualUID[i]=mfrc522.uid.uidByte[i];          
                  } 
                  Serial.print("     ");                                   
                  if(compareArray(ActualUID,Usuario1))
                    Serial.println("Acceso concedido...");                    
                  else if(compareArray(ActualUID,Usuario2))
                        Serial.println("Acceso concedido...");                    
                  else
                      Serial.println("Acceso denegado...");                      
            }
  }
  
  while ( !mfrc522.PICC_IsNewCardPresent()){

 SPI.end(); 
 //SPI.begin(); 
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();
  
 for (byte i = 0; i < 5; i++) {
   radio.write(ActualUID[i],sizeof ActualUID);
   Serial.print(ActualUID[i]);
 }
 Serial.println(" ");
 //mfrc522.PCD_Reset();
  }
}

//Función para comparar dos vectores
 boolean compareArray(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);
}

RECEPTOR

#include <SPI.h>
#include "nRF24L01.h"
#include <printf.h>
#include <RF24.h>
//#include "RF24_config.h"
RF24 radio(7,8); // CE, CSN
const byte address[6] = "00001";
byte  dato[6];
 
void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0,address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
}
void loop() {
  
  if (radio.available()) {
   
     radio.read(dato,sizeof(dato));
     Serial.print(dato[0]);
    Serial.print(dato[1]);
    Serial.print(dato[2]);
    Serial.print(dato[3]);
    Serial.print(dato[4]);
    Serial.println(" ");
    delay(100);
    //radio.stopListening(); 
    }
  }

PRUEBA4-RX.ino (637 Bytes)

PRUEBA4-TX.ino (2.35 KB)

Buenas!

  • ¿ Has comprobado si los módulos NRF24l01 se comunican correctamente sin estar conectado el RFID RC522 ?

Si no es así, puedes seguir este ejemplo

  • ¿ Has comprobado si el módulo RFID RC522 funciona correctamente por separado ?

  • ¿Podías poner un esquema con las conexiones?

  • Una foto de las conexiones tampoco estría mal...

Es muy importante asegurarte de que estén correctamente, a veces algunos problemas relacionados con estos los módulos nrf24l01 se solucionan conectando un condensador (10uF es suficiente) entre los pines de alimentación.

Saludos!

Edita tu post inicial y no uses maýúsculas para escribir el cuerpo del post. Las mayúsculas es como gritarnos.
Seguramente no fue tu intención pero editalo por favor.
Te he enviado un privado con instrucciones

Cuando conectas dos dispositivos via SPI se debe garantizar el estado de inhabilitacion para el dsipositivo no seleccionado. Para ello debe haber un resistor PULL-UP. En el caso del RFID supongo que esta pero en el nRF24L01 seguro que no. Coloca uno de 3.3 o 4.7K a 3.3V en el caso del nRF24 y nos comentas si dió resultado.