Enviar String mediante I2C

Buenas noches, tengo un problema con el i2c, quiero enviar un String hacia otro arduino mediante el protocolo de i2c y tengo un problema, que es que solo recibe los datos cuando el esclavo se resetea, le adjunto el codigo para que me puedan ayudar si detectan un problema, gracias

CÓDIGO DEL MAESTRO

#include <Wire.h>//incluimos la libreria del I2C
String cadena ="Sos el esclavo";//declaramos la variable de tipo string a enviar

void setup() {
  Wire.begin();       //configuramos el i2c
  Serial.begin(9600); //configuramos el puerto serie
  Serial.println("Maestro i2c");
}

void loop() {
  //Serial.println(cadena);
  byte tamTexto = cadena.length()+1;//obtenemos la longitud del string al que le sumamos 1
  //Serial.println(tamTexto);
  char cadenaArray[tamTexto];       //declaramos un vector de caracteres, el cual va a ser usado para enviar el dato
  cadena.toCharArray(cadenaArray,tamTexto);//convertimos el string a un vector de caracteres
//for(byte i=0;i<=tamTexto;i++){
//    Serial.print(cadenaArray[i]); 
//  }
//  Serial.println(" ");
  Wire.beginTransmission(1);//inicializamos la transmision i2c al esclavo 1
  for(byte i=0;i<=tamTexto;i++){
    Wire.write(cadenaArray[i]); //le enviamos caracter por caracter
  }
  Wire.endTransmission();//finalizamos la comunicacion
  Serial.println("Se envio el dato");
  cadena="Hola";//asignamos otra palabra para enviar
  delay(1000);//esperamos 1seg entre envios
}

CÓDIGO DEL ESCLAVO

#include <Wire.h>//incluimos la libreria del I2C

char cadena[20];//definimos un vector de caracteres que es donde se almacena el dato recibido
byte nDato=0;

void setup() {
  Serial.begin(9600);//configuramos el puerto serie
  Serial.println("Esclavo");
  Wire.begin(1);//configuramos el i2c y lo asignamos como esclavo 1
  Wire.onReceive(datoRecibido);//subrutina cuando recibe un dato
  //Wire.onRequest(enviarDato);
  //pinMode(13,OUTPUT);

}

void loop() {
    //Serial.print("Dato recibido: ");Serial.println(cadena); 
    //digitalWrite(13,estado);
}

void datoRecibido()
{
  nDato=0;//ponemos a 0 la variable de conteo
  while(Wire.available()>0)   {
    char dato = Wire.read(); // Recibe la palabra del i2c tx
    if (dato != '\0')   {
        cadena[nDato] = dato;//guarda el caracter recibido en una poscicion del vector
        //Serial.print(dato);
        //Serial.print(" ");
        nDato++;//incrementamos el contador
        //Serial.print(nDato);
        //Serial.print(" ");
    }
    else
        break;//al finalizar la transmicion rompemos el while
  }
  for(byte i=0;i<=19;i++){//imprimimos lo que hay en el vector
    Serial.print(cadena[i]);
  }
  Serial.println(" ");
}

//void enviarDato()
//{
//  Wire.write(1);
//}

Te he enviado un privado con instrucciones para que edites tu post.
Cuando pueda ver tus códigos te daré algún tipo de respuesta.