Srerial comportamiento extraño

Estoy comunicando un Arduino uno con un rasberry. En el arduino solo hay un sencillo programo tomado casi en su totalidad de ejemplos de serial

#define out 13
String inputString = "";         // a String to hold incoming data
boolean stringComplete = false;  // whether the string is complete

void setup() {
 // put your setup code here, to run once:
 pinMode(out,OUTPUT);
 Serial.begin(115200);
}

void loop() {
 // put your main code here, to run repeatedly:
 // print the string when a newline arrives:
 if (stringComplete) {
   if (inputString == "1") {
     digitalWrite(out,HIGH);
     Serial.println("set to HIGH");
   }else if (inputString == "0") {
     digitalWrite(out,LOW);
     Serial.println("set to LOW");
   }else{
     Serial.println(inputString);
   }
   // clear the string:
   inputString = "";
   stringComplete = false;
 }
}

una vez ejecutado y comunicado con el Serial monitor trabaja sin novedad.
al comunicarlo con la raspberry que ejecuta un programa escrito en Qt igualmente pone en HIGH el pin 13 al recibir un “1” enviando de vuelta “set to HIGH” y pasa a LOW al recibir un “0” enviando de vuektsa “set to LOW”, lo extraño ocurre al comentar en la raspberry como se muestra, la parte del cogido que recibe la respuesta del arduino, el programa ya no cambia el LED.

Yo tengo entendido que si se escribe en puerto serial, no es problema si del otro lado no hay conexión o si no no se lee.

Alguna idea que causa esto.

Si se recompila el script del arduino suprimiendo los serial prints, igualmente trabaja como se espera.

Es como si al usar el serial print fuera obligatorio el leer del lado del raspberry

       if (CTRL_CMD != "") {
           qDebug() << "Sending ctrl " << CTRL_CMD;
           data = (CTRL_CMD + "\n").toLocal8Bit() ;
           ctrl_port.write(data);
           CTRL_CMD = "";
       }

//        if (ctrl_port.isOpen()) {
//            if (ctrl_port.waitForReadyRead(4)) {
//                while (ctrl_port.canReadLine()) {
//                    data = ctrl_port.readLine();
//                    data.resize(data.size() - 2);
//                    QString resp = QString(data);
//                    qDebug() << "Reciving ctrl " << resp;
//                }
//            }
//        }

Gracias por su atención

Primero lee las normas del foro y edita tu post (los códigos van con etiquetas).

Ese programa que tienes de Arduino no hace nada mas que enviar

Serial.println("set to LOW");
Serial.println("set to HIGH");

De paso mira como deben verse los códigos

A tu programa le falta LEER los datos enviados por el Raspberry.

void loop() {
  // print the string when a newline arrives:
  if (Serial.available() >0) {
     inputString = Serial.read();
     stringComplete = true;
 }
 
if (stringComplete) {
    if (inputString == "1") {
      digitalWrite(out,HIGH);
      Serial.println("set to HIGH");
    }else if (inputString == "0") {
      digitalWrite(out,LOW);
      Serial.println("set to LOW");
    }else{
      Serial.println(inputString);
    }
    // clear the string:
    inputString = "";
    stringComplete = false;
  }
}

Prueba de esta manera

Ok, perdon por la falta realmente no lei las normas, usualmente no utilizo estos medios.

De nuevo para ser mas claro

Código en el arduino para leer

void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
    if (inChar == '\n') {
      stringComplete = true;
    }else{
      // add it to the inputString:
      inputString += inChar;
    }
  }
}

Codigo en el Arduino para analizar y enviar

void loop() {
  // put your main code here, to run repeatedly:
  // print the string when a newline arrives:
  if (stringComplete) {
    if (inputString == "1") {
      digitalWrite(out,HIGH);
      Serial.println("set to HIGH");
    }else if (inputString == "0") {
      digitalWrite(out,LOW);
      Serial.println("set to LOW");
    }else{
      Serial.println(inputString);
    }
    // clear the string:
    inputString = "";
    stringComplete = false;
  }
}

Codigo en la raspberry para leer

        if (ctrl_port.isOpen()) {
            if (ctrl_port.waitForReadyRead(4)) {
                while (ctrl_port.canReadLine()) {
                    data = ctrl_port.readLine();
                    data.resize(data.size() - 2);
                    QString resp = QString(data);
                    qDebug() << "Reciving ctrl " << resp;
                }
            }
        }

Codigó en la raspberry para enviar

        if (CTRL_CMD != "") {
            qDebug() << "Sending ctrl " << CTRL_CMD;
            data = (CTRL_CMD + "\n").toLocal8Bit() ;
            ctrl_port.write(data);
            CTRL_CMD = "";
        }

Como bien lo menciona el codigo de Arduino no es nada complejo.
La cuestion es que si en la raspberry se deshabilita la parte del Codigo para la lectura la comunicacion se detiene como si para Arduino fuera necesario que se lean los datos enviados

De nuevo gracias