Comunicación entre Arduinos

Buenos días.
Tengo un proyecto cargado y funcionando en Arduino Mega, y tengo todas las entradas y salidas PWM ocupadas (en total me quedan 8 pines digitales libres de 53). Por lo tanto, no puedo añadirle una tarjeta ethernet. Se me ocurre conectar la tarjeta ethernet a un Arduino UNO y comunicar ambas tarjetas por los puertos Serial de Arduino UNO y Serial2 de Arduino Mega.
El problema es que cuando pruebo las comunicaciones entre Arduinos funcionan bien siempre que no estén haciendo otra cosa. En cuanto cargo todo el código en Arduino Mega y escribo en el loop la parte correspondiente a la lectura del puerto Serial2 pasan dos cosas: Read fail o recibe un valor que no tiene nada que ver con lo que yo estoy enviando.
¿Cómo puedo "sincronizarlos" para que uno escriba cuando el otro lee o al revés? Teniendo en cuenta también que Arduino UNO ahora sólo está escribiendo mensajes a Arduino MEGA, pero tiene que hacer muchas más cosas más adelante.
Gracias. Un saludo.

Códigos de envío y recepción

Para recepción:
// Comprueba si tiene un mensaje
if(Serial2.available()){

memset(cadena, 0, sizeof(cadena));

while (Serial2.available()){
delay(5);
cadena[contador]=Serial2.read();
contador++;
}

contador=0;

valor=atoi(cadena);
Serial.println(valor);

}

Para envío hago simplemente un Serial.print(Mensaje);

hay tarjetas simples ethernet que usan el puerto spi.
el chip enc28j60 solo usa 5 lineas. Arduino Shield List: Nu Electronics Ethernet Shield v1.0
Deberias revisar y dejar libre estos puertos porque esto te sirve para ampliar sin perder lineas

Pule el codigo para que le de tiempo a todo lo que haces de manera mas eficiente.
Recuerda que todas las comunicaciones consumen tiempo de cpu, y hasta no completar el ciclo no puede hacer lo anterior. En algunos caso se genera una interrupcion y por eso se pierden datos.