RFID - RC522

Hola a todos,

estoy desarrollando un proyecto con un modulo RFID - RC522. El problema es que si lo pongo en los pines por defecto que son:

SDA es el pin 10
SCK es el pin 13
MOSI es el pin 11
MISO es el pin 12
RST es el pin 9

Me funciona, pero como en mi proyecto estoy usando ademas una ethernet shield en Arduino Mega. He leido esto en la web de arduino :

On Arduino Mega: pins 50,51,52 using the ICSP header. Pin 10 used to select the W5100

por lo tanto los pines 50,51,52,10 estan reservados para la ethernet shield. En la conexion del modulo RFID solo me afecta el pin 10, por lo tanto me gustaria saber si alguien sabe como seleccionar otros pines para este modulo y que asi no se pisen. Muchas gracias, os dejo el codigo:

/*
Proyecto de control de acceso para el fichaje de personal a nivel industrial.
 
 Version: 1.0.0
 Fecha: 18/02/2015
 
 Desarrollado por: @marcoscasado6
 
 -----------------
 Placa RFID:
 SDA es el pin 10
 SCK es el pin 13
 MOSI es el pin 11
 MISO es el pin 12
 RST es el pin 9
 -----------------
 */

#include <Ethernet.h>
#include <SPI.h>
#include <RFID.h>
#include <SD.h>

#define BTN_IN 5
#define BTN_OUT 4

//Declaraciones Varias
RFID rfid(10, 9);
int inout=0;
int id [5];
String card_id;



EthernetClient client;
// Direccion mac del dispositivo
byte mac_address[] = {
  0x90,0xA2,0xDA,0x0D,0xF4,0x61};
// Direcciones IP del cliente y el servidor
IPAddress server_ip(192,168,1,1);
IPAddress client_ip(192,168,1,100 );


void setup(){
  
  Serial.begin(9600);
  Serial.println("Iniciando...");
  Serial.println("Control de personal v1.0.");
  SPI.begin();
  Serial.println("SPI ... [OK]");
  rfid.init();
  Serial.println("RFID ... [OK]");
  
  pinMode(BTN_IN,INPUT);
  pinMode(BTN_OUT,INPUT);

  delay(500);
  
  Serial.println("Cargando modulo Ethernet ...");
  Ethernet.begin(mac_address);
  Serial.println("Ethernet ... [OK]");
  Serial.print("Direccion IP establecida: ");
  Serial.println(Ethernet.localIP()); 

  
  Serial.println("Todos los modulos han sido cargados correctamente.");
  delay(100); // Tiempo de cortesia
}


void loop (){
  
 readCard(); 
     
}


//Metodo para leer la tarjeta
void readCard() {

  if (rfid.isCard()) {

    Serial.println("IS CARD");
    if (rfid.readCardSerial()) {

      for(int i=0; i<=4 ; i++) {
        id[i] = rfid.serNum[i];
        card_id = card_id + id[i];
      }  
      
      Serial.println(card_id); 
      delay(200); // para que no se imprima constantemente el mismo numero        
    }
  }
  rfid.halt();
}


//Metodo para ejecutar una consulta SQL
void httpRequest() {
  Serial.println("Iniciando conexion HTTP...");
  // Se conecta al servidor en el puerto 80 (web)
  if (client.connect(server_ip, 80)) {
    // Envia el requerimiento al servidor via GET
    Serial.println("Conexion 192.68.1.1:80 ... [OK]");
    client.print("GET /connect.php?id_card");
    //client.print(id); // Corregir lo de la conversion int[5] a int
    client.print("&inout=");
    client.print(inout);
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.println("192.168.1.1");
    client.println("User-Agent: Arduino-Ethernet");
    client.println("Connection: close");
    client.println();
    //Aqui encender LED verde
  } 
  else {
    // Si la conexion fallo se desconecta
    Serial.println("Conexion 192.68.1.1:80 ... [ERROR]");
    Serial.println("Desconectando...");
    //Aqui encender LED rojo
    client.stop();
  }
}

He probado a cambiar esta linea RFID rfid(10, 9); por RFID rfid(8, 9); para conectarlo en el pin 8 pero no me ha funcionado bien, no se por que.

Hay cosas sin sentido porque aun esta todo a medias. Pero lo importante es como cambiar el pin 10 del modulo rfid a otro pin. GRACIAS

Un saludo

Saludos Alohanet

Una cosa de la que debes tener conocimiento es que el protocolo SPI, esta diseñado para ser usado con varios dispositivos en paralelo, lo unico que cambia son los pines de seleccion de esclavo (SS o CS).

Para usar tu modulo ethernet y RFID, ambos tienes que ir conectados en el mega en 50, 51 y 52, pero los pines de SS lo seleccionas tu. Tu ejemplo dice que para el modulo Ethetnet es el 10, como es una shield puedes dejar ese, pero si lo quieres puede doblar la patita del modulo y conectarla a otro pin.

En cuanto a tu RFID puedes usar tambien cualquier pin, que no se este usando para otra cosa.

Pero lo que es SCK, MOSI, MISO deber ser igual para los dos modulos.

muchas gracias max_saeta en cuanto me he informado mas a cerca del protocolo SPI ya lo he entendido. Si alguien necesita esta info, aquí

Les dejo un ejemplo por si a alguien le surge el mismo problema:

Con esta configuración,

#include <SPI.h>
#include <RFID.h>

#define SDA 9
#define RESET 8

RFID rfid(SDA, RESET);

El conexionado sería,

PINOUT:

RC522 MODULE

** PIN Uno/Nano MEGA**

SDA D10 D9
SCK D13 D52
MOSI D11 D51
MISO D12 D50
IRQ N/A N/A
GND GND GND
RST D9 D8
3.3V 3.3V 3.3V

Un saludo