Conflito Shield Ethernet + EasyVR no arduino mega 2560

Olá galera,

Estou fazendo um pequeno projeto de automação para o meu quarto. Estou usando um arduino mega 2560, um ethernet shield e um módulo de reconhecimento de voz EasyVR 2.0. Bom, de cara tive problema para conseguir fazer os dois shield funcionarem no mega ao mesmo tempo, ambos usavam os pinos 12 e 13 do arduino. Consegui fazer funcionar os dois shield, mudando os pinos que o EasyVR usa para comunicação serial colocando-os nos pinos 50 e 51, que de acordo com o manual, são portas que se pode utilizar para esse tipo de comunicação. Ai começa o problema, quando eu upo o código do EasyVR para o arduino funciona normalmente ( com o ethernet shield conectado tbm). Se eu adicionar no Setup() as linhas que inicializam o shield ethernet

 Ethernet.begin(mac, ip);
 server.begin();

nesse mesmo código que está funcional, o arduino não consegue mais reconhecer o shield de reconhecimento de voz e fico parado no

  while (!easyvr.detect())
  {
    Serial.println("EasyVR not detected!");
    delay(1000);
  }
#if defined(ARDUINO) && ARDUINO >= 100
  #include "Arduino.h"
  #include "Platform.h"
  #include "SoftwareSerial.h"
#ifndef CDC_ENABLED
  // Shield Jumper on SW
  SoftwareSerial port(50,51);
#else
  // Shield Jumper on HW (for Leonardo)
  #define port Serial1
#endif
#else // Arduino 0022 - use modified NewSoftSerial
  #include "WProgram.h"
  #include "NewSoftSerial.h"
  NewSoftSerial port(50,51);
#endif

#include "EasyVR.h"
#include "C:\Users\Nando\Desktop\EasyVR Sounds\SONSPROJETOPORTUGUES.h"
#include <SPI.h>
#include <String.h>
#include <Ethernet.h>
EasyVR easyvr(port);

//Groups and Commands
enum Groups
{
  GROUP_0  = 0,
  GROUP_1  = 1,
  GROUP_2  = 2,
  GROUP_3  = 3,
  GROUP_16 = 16,
};

enum Group0 
{
  G0_LINUX = 0,
};

enum Group1 
{
  G1_NANDO_SANTOS = 0,
};

enum Group2 
{
  G2_CORTINA = 0,
  G2_ARCONDICIONADO = 1,
  G2_LUZES = 2,
  G2_FILME = 3,
  G2_DORMIR = 4,
  G2_TELEVISAO = 5,
  G2_CONFIG = 6,
  G2_STANDBY = 7,
};

enum Group3 
{
  G3_LIGAR = 0,
  G3_DESATIVAR = 1,
};

enum Group16
{
  G16_PASS_NANDO = 0,
};

byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);
EthernetServer server(80);

String readString = String(30); // string para buscar dados de endereço
boolean statusLed = false; // Variável para o status do led 
EasyVRBridge bridge;
int idx_cmd;
int idx_pwd;
int8_t idx;
int8_t group = 0;
uint32_t mask = 0;
uint8_t train = 0;
int8_t trained_pw = 0;  //number of existing passwords
int8_t trained_un = 0;  //number of existing user names
bool lock = 0;          // locked/unlocked flag
bool error = 0;         // error flag
char name[32];
const int cortina = 22;
const int ar = 23;
const int luzes = 24;
int comando;  

void setup()
{
  
 Ethernet.begin(mac, ip);     //LINHA DE CODIGO QUE PARA O EASYVR
 server.begin();                   //LINHA DE CODIGO QUE PARA O EASYVR
 
 pinMode(luzes, OUTPUT);
 pinMode(ar, OUTPUT);
 pinMode(cortina, OUTPUT);
  
#ifndef CDC_ENABLED
  // bridge mode?
  if (bridge.check())
  {
    cli();
    bridge.loop(0, 1, 50, 51);
  }
  // run normally
  Serial.begin(9600);
  Serial.println("Bridge not started!");
#else
  // bridge mode?
  if (bridge.check())
  {
    port.begin(9600);
    bridge.loop(port);
  }
  Serial.println("Bridge connection aborted!");
#endif
  port.begin(9600);

  while (!easyvr.detect())
  {
    Serial.println("EasyVR not detected!");
    delay(1000);
  }

  easyvr.setPinOutput(EasyVR::IO1, LOW);
  Serial.println("EasyVR detected!");
  easyvr.setTimeout(5);
  easyvr.setLanguage(EasyVR::ENGLISH);
  
  easyvr.setLevel(EasyVR::HARDER);
  easyvr.setKnob(EasyVR::STRICTER);
}

Alguém já teve esse problema e pode compartilhar a solução ? Ou ao menos, me indicar algo para tentar fazer funcionar ? Não tenho mais ideias. Já tem duas semanas que tento fazer isso funcionar, procurei em fóruns, youtube, deepweb e ainda não achei.
Valeu!

Importas-te de colocar aqui uma foto do teu arduino com os shields empilhados??

Na net, o VR shield tem o formato dum Arduino Uno... os pinos 50 e 51 ficam num conector bem atrás no Arduino Mega...

A minha questão é como é que ligaste os pinos 50 e 51 ao shield?

Então, eu peguei o manual do EasyVR shield e conectei os pinos que são usados no Shield ethernet (este está empilhado com o arduino) com jumpers, não empilhando-os. Pensei em comprar um shield com uma protoboard para fazer isso, mas o dinheiro está curto.
A conexão feita foi:

Pino 12 do easyVR no pino 50 do arduino;
Pino 13 do easyVR no pino 51 do arduino;
Pinos Reset, 5V, e GND no mesmo lugar no arduino.

Não coloquei os pinos 0 e 1 (RX/TX) pois esses o easyVR só utiliza quando precisa configurar os dados das gravações.
Penso que o problema é algum conflito de software, pois quando uso o codigo só do easyVR funciona normalmente, mas quando inicializo o ethernet, ele para de funcionar.

O teu problema é que os pinos que estas a tentar usar são na verdade os pinos do SPI que o ethernet usa.
o 51 é o MOSI,50 é o MISO.Se usas a ethernet no teu codigo,nao podes usar esses pinos para virtualizar a Serie.
Eles ficam ocupados quando crias uma instância para a Ethernet funcionar

Então, antes de ligar os shields dessa maneira, eu empilhei eles. O pino 12 e 13 do easyVR estava exatamente junto dos pinos 12 e 13 do arduino. Mas tbm não funcionou. O shield ethernet utiliza os pinos 50 (MISO), 51 (MOSI), 52 (SCK) e 53 (Hardware SS) no arduino mega, logo, quando estava utilizando as portas 12 e 13 do arduino mega quando estava empilhado, não era para acontecer conflito algum, e aconteceu, o easyVR não é detectado do mesmo jeito. Tentei usar o easyVR em outras portas, mas só funcionou na 10 e 11 / 12 e 13 / 50 e 51. Mas em todas essas, sempre que eu inicializo a ethernet com o Ethernet.begin() o shield do easyVR para de funcionar.
Por isso eu penso que o problema é algo relacionado a software.

Acho que estás enganado...

On the Mega, the hardware SS pin, 53, is not used to select either the W5100 or the SD card, but it must be kept as an output or the SPI interface won't work.

O shield usa o pino 10 como ss.

Mete aqui o código que usas....