Problema "DESCONOCIDO"

Buenas noches amigos... primero que nada gracias por toda la ayuda que brindan a todos entre todos :3.. e buscado en google y e intentado varias formas de hacer lo que quiero, con el codigo que publico a continuación me funciona pero sucede que el arduino se cuelga... osea se congela, e incluso despues de la segunda iteracion

que hace: basicamente tengo 2 arduino conectados via serial, uno le envia una cadena al otro por tx.. ejemlpo: 23324\t329048\tklsdjfk\t123213\t654654\n... son valores que obtengo de 5 sensores distintos, los envio mediante una cadena asi porque el segundo arduino tiene que identificar donde inicia y donde termina cada uno de los valores por eso el "/t" y el "/n" para que conosca que ahi termino la cadena de datos, al tener esto asi el segundo arduino ubica nuevamente los valores en distintas variables x ejemplo: var1=23324 y asi cada una de ellas etc... la intencion de hacerlo asi es poder en un futuro anexarlo a un ethernet y poder fabricar una cadena post, pero no es el lio...

#include <MemoryFree.h>

String string="",v1="",v2="",v3="",v4="",v5="";
int cont=1,caracteres=0;


void setup()
{

  Serial.begin(9600);

  Serial.print("freeMemory()=");        Serial.println(freeMemory());
      Serial.println(F("============   LISTO   ==========="));
      Serial.println();

}

void loop()
{
  if (Serial.available()) {
  Serial.print("freeMemory()=");        Serial.println(freeMemory());
  parseo_texto();
   }
}

String parseo_texto() {
  char c;
  while (c!='\n') {
    c = Serial.read();
     if (c=='\t')
    {
      cont++;
    }

    if (c!=-1)
    {
      string+=c;
      if (c!='\t')
      {
        switch (cont) {
          case 1:
            v1+=c;
            break;
          case 2:
            v2+=c;
            break;
          case 3:
            v3+=c;
            break;
          case 4:
            v4+=c;
            break;
          case 5:
            v5+=c;
            break;
            }
      }
      delayMicroseconds(200);
    }
    caracteres++;
    }

   Serial.print("Longitud de cadena analizada: ");
   Serial.println(caracteres);
    // Serial.print(string);
    Serial.println("Valor 1: "+v1);
    Serial.println("Valor 2 : "+v2);
    Serial.println("Valor 3: "+v3);
    Serial.println("Valor 4: "+v4);
    Serial.println("Valor 5: "+v5);
   string="";v1="";v2="";v3="";v4="";v5="";
   cont=1;caracteres=0;
  Serial.print("freeMemory()=");        Serial.println(freeMemory());

}

Problema: luego de una segunda iteraccion el arduino se congela o se queda parado y no pasa nada, tengo que reiniciarlo para que reciba y nuevamente luego de 2 veces que recibe del arduino pincipal se queda colgado y asi asi y asi sucesivamente...

Que muestra serial:

freeMemory()=1668
============   LISTO   ===========

freeMemory()=1660
Longitud de cadena analizada: 25060
Valor 1: 786786
Valor 2 : 786786
Valor 3: 465786
Valor 4: 766876
Valor 5: 786786
freeMemory()=1445

Longitud de cadena analizada: 26373
Valor 1: 786786
Valor 2 : 786786
Valor 3: 465786
Valor 4: 766876
Valor 5: 786786

freeMemory()=1445

en realidad lo hace 1 y 2 vez y ya no hace mas.. tengo que reiniciar el arduino para que haga 1 y 2 vez de nuevo :S pero logico no es comodo y no es la idea...

incluso monitoreo la memoria sram pero nada... al parecer no es problema de eso

pienso que debe ser algun problema con alguna variable que se pasa de peso pero segun mi logica el codigo esta bien...

no logro identificar el problema o que ocurre... o si alguien mas sabe como hacer lo que deseo pues me heche una mano, le agradecere :slight_smile:

saludos! espero puedan ayudarme!

Tu problema reside en el posible desbordamiento del buffer serial. Al llamar a parseo_texto() si hay disponible algo en el serial y no hay un carater de linea nueva, porque que el buffer serial esta completo, el while entra en un loop infinito y se desbordan las variables contadoras. Deberías limpiar el buffer serial después de llamar a parseo_texto() con Serial.flush() y en lo posible eliminar el while y remplazarlo con estructuras for ya que cuentas con el dato de longitud de caracteres.