UART no lee correctamente

Hola tengo el siguiente problema, mi codigo se utiliza en un arduino nano que esta conectado a un LCD tft 2.4" IL9341 usando 8 bits, luego mediante UART se conecta a otro dispositivo (Tiva C de TX), pero para probar que recepcione bien todo lo hago mediante la consola.

El problema resulta cuando mando datos (de la siguiente forma se mandan "id|dato") si no coloco un println o print con cualquier cosa dentro del codigo while (serial.available()>0) no lee correctamente los caracteres, por lo tanto es como si no recibiese nada.

Probe cambiar la velocidad (baud rate)
Probe usar while o if
Probe colocar un delay o delaymicro

La verdad no entiendo porque ocurre este problema

Codigo del void loop, es lo mas relevante

void loop(void) {
  while(Serial.available() > 0) {
    Serial.println("por alguna razon si no pongo esto no anda");
    int inChar = Serial.read();
    //Serial.println(Serial.read());
    //Verifico si ya lei hasta la ID (hasta que se recibe '|')
    if (!flagID) {
      if (isDigit(inChar)) {
        inString += (char)inChar;
      } else if (inChar == '|') { //Finalizacion de la ID
        inID = inString.toInt();
        //Serial.print("ID: "); Serial.println(inID);
        inString = "";
        flagID = true;
      }
    } else {  //Leo datos
      if (inChar != '\n') {   //Guardo datos hasta que recibo un \n
        inString += (char)inChar;
      } else {
        inDato = inString.toFloat();
        //Serial.print("Dato: "); Serial.println(inDato);
        inString = "";
        flagID = false;
        for (int i = 0; i < cantidadVariables; i++) {
          if (identificador[i] == inID) {
            //Serial.print("ID igual al i: ");Serial.println(i);
            *(variables[i]) = inDato;
            flagRx = true;
            break;
          }
        }
      }
    }
  } //  if (Serial.available() > 0) {
  if (flagRx == true) {
    //Serial.println("writting");
    write_menu_principal();
    flagRx = false;
  }
}//LOOP
Serial.println("por alguna razon si no pongo esto no anda");

Esta linea lo unico que haces es crearte un pequeño delay() si la reemplazas por un delay(5) o delay(10) seguro funciona sin ella.