Problème de lecture tag rfid et ethernet shield

Bonjour,
j’ai le projet de faire un lecteur rfid pour contrôler un volet roulant tout en communiquant avec Domoticz.
J’ai pu trouver un code qui correspond à mon projet et que j’ai modifié.
Le matériel :
Arduino nano, enc28j60, rdm630, tag

Le problème est que le tag est lu aléatoirement : dans le serial, il est affiché des caractères inconnus avec quelques partis de code du tag.
Après une certaine attente de lecture en laissant le tag sur l’antenne, parmi tout le texte dans le serial, le tag s’affiche quelques fois au complet.

J’ai trouvé que lorsque je désactive l’ethernet et donc je supprime la ligne : if (ether.begin(BUFFER_SIZE, mymac, CS_PIN) == 0)
la lecture du tag refonctionne.

Savez-vous quel pourrait être le problème ?
Merci

 /*
    * arduWebRelays.ino
    *
    * Created: 07/09/2013 15:55:00
    *  Author: G. Carriere - guillaume_DOT_carriere_AT_gmail.com
    *
    */
    #include <EtherCard.h>
    #include <SoftwareSerial.h>
    
    #define AUTH_TAG_CODE_1 "WWWWWWWWWWW"
    #define AUTH_TAG_CODE_2 "XXXXXXXXXXX"
    #define AUTH_TAG_CODE_3 "YYYYYYYYYYY"
    #define AUTH_TAG_CODE_4 "ZZZZZZZZZZZ"
    
    static byte mymac[] = { 0x00,0x02,0x02,0x02,0x02,0x02  };
    static byte myip[] = { 192,168,0,203 };
    
    #define BUFFER_SIZE   500
    byte Ethernet::buffer[BUFFER_SIZE];
    BufferFiller bfill;
    #define CS_PIN       10
    
    //Pin du Relais de commande
    #define RELAIS_COMMANDE     9

    //Pins du port série de communication avec lecteur RFID RDM6300
    SoftwareSerial rfid = SoftwareSerial(2, 3);
    
    String msg;
    char c;
    
    const char http_OK[] PROGMEM =
    "HTTP/1.0 200 OK\r\n"
    "Content-Type: text/html\r\n"
    "Pragma: no-cache\r\n\r\n";
    const char http_Found[] PROGMEM =
    "HTTP/1.0 302 Found\r\n"
    "Location: /\r\n\r\n";
    const char http_Unauthorized[] PROGMEM =
    "HTTP/1.0 401 Unauthorized\r\n"
    "Content-Type: text/html\r\n\r\n"
    "<h1>401 Unauthorized</h1>";
    void homePage()
    {
      bfill.emit_p(PSTR("$F"
        "<title>Volet roulant</title>"
        "<a href=\"?volet=on\">Ouvrir volet roulant</a>
" ),
      http_OK);
    }
    
    //Ouverture du volet roulant
    void openClose(){
      digitalWrite(RELAIS_COMMANDE, HIGH);
      delay(8000);
      digitalWrite(RELAIS_COMMANDE, LOW);
      delay(500);
      emptySerialRFIDReader();
    }
    
    //Acces non autorisé
    void deny(){
      for(int i=0; i<20; i++){     
        delay(100);
      }
      emptySerialRFIDReader();
    } 
    
    //Vidage buffer port série (après lecture d'un badge : éviter les doubles lectures intempestives
    void emptySerialRFIDReader(){ 
      //empty rfid tag
      while(rfid.available()>0) rfid.read();
      msg="";
    }
    
    void setup()
    {
      Serial.begin(115200); 
      rfid.begin(9600);
      Serial.println("RFID Ready" );
      pinMode(RELAIS_COMMANDE, OUTPUT);
      
      if (ether.begin(BUFFER_SIZE, mymac, CS_PIN) == 0)
        Serial.println("Cannot initialise ethernet." );
      else
        Serial.println("Ethernet initialised." );
      ether.staticSetup(myip);
       
      Serial.println("Setting up DHCP" );
      if (!ether.dhcpSetup())
        Serial.println( "DHCP failed" );
     
      ether.printIp("My IP: ", ether.myip);
      ether.printIp("Netmask: ", ether.netmask);
      ether.printIp("GW IP: ", ether.gwip);
      ether.printIp("DNS IP: ", ether.dnsip);
    }
    
    void loop()
    {
      boolean commandevolet = false;
     
     
      while(rfid.available()>0){
        c=rfid.read();
        
                      Serial.print(c);
        
        msg += c;
      }
      msg=msg.substring(1,13);
      
                      Serial.print(msg);
      
      if(msg.indexOf(AUTH_TAG_CODE_1)>=0)
            commandevolet = true;
      else if(msg.indexOf(AUTH_TAG_CODE_2)>=0)
            commandevolet = true;
      else if(msg.indexOf(AUTH_TAG_CODE_3)>=0)
            commandevolet = true;
      else if(msg.indexOf(AUTH_TAG_CODE_4)>=0)
            commandevolet = true;
      else if(msg.length()>10) deny();
      msg="";
     
      word len = ether.packetReceive();   // check for ethernet packet
      word pos = ether.packetLoop(len);  // check for tcp packet
     
     
      if (pos) {
        bfill = ether.tcpOffset();
        char *data = (char *) Ethernet::buffer + pos;
        if (strncmp("GET /", data, 5) != 0) {
          // Unsupported HTTP request
          // 304 or 501 response would be more appropriate
          bfill.emit_p(http_Unauthorized);
        }
        else {
          Serial.print("----" );
          Serial.print(data);
          Serial.println("----" );
          data += 5;
          if (data[0] == ' ') {
            // Return home page
            homePage();
          } else if (strncmp("?volet=on ", data, 11) == 0) {
            bfill.emit_p(http_Found);
            commandevolet = true;
           
          } else {
            // Page not found
            bfill.emit_p(http_Unauthorized);
          }
        }
        ether.httpServerReply(bfill.position());    // send http response
      }
     
     
      if(commandevolet) openClose();
    }

Un extrait du serial :

17008AA1317008A4170088047008A¢þ17 ŠšÂ‚¢1700817008AA13817008‚¢þ1 ŠšÂ‚¢17 ŠšÂ‚¢~

ŠšÂ‚17008A17 ŠšÂ17008AA138048AA1317 ŠšÂ‚¢þ§¨¨¦17008AA1317008‚¢þ1a ŠšÂ‚17008804

ŠšÂ170080417008A¢þ17008041 ŠšÂ17008AA13804¢þ17 ŠšÂ‚¢§¨¨¦&a17008ÍႢþ17008AA13804 ¢þ170ÅÍá‚1700ÍႢ>17008AA1380L&'§¨¨¦&'& 17008AA138§¨(17008AA13804ÅÍႢ70ÅÍᢧ¨¨¦&'&MàPL&'&Mà17008A4§¨¨¦&'&MàÂ