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