[SOLUCIONADO] Envío de String con CR desde Arduino a un dispositivo

Buenas a todos.

Quiero controlar con una placa Mega un dispositivo por USB con estas características:

Baud rate: 9600
Sin paridad
Bit de parada: 1
Bit de datos: 8
Control de flujo: No
Delimitador: CR

Si conecto el dispositivo al PC vía USB y lo controlo desde el monitor serie, poniendo sólo CR como delimitador, funciona (Imagen 2)

Le he conectado al Mega, usando el Serial 3, un Arduino Nano en el que se me quemó el micro (se lo quité) pero que el FTDI funciona bien.
Si conecto el Mega y el Nano (llamemosle así aunque sea el FTDI) al PC por puertos USB distintos y miro el monitor serie de cada uno también hay comunicación. Si envío comandos por el monitor asociado al Mega estos llegan al Nano y salen por su monitor uno a continuación del otro. También desde el monitor del Nano puedo mandar mensajes al Mega y sin problema. En (Imagen 3), COM3 es el Mega y COM4 el Nano.
En resumen, el FTDI del Nano parece que sirve para comunicar el Mega y el dispositivo.

El problema lo tengo cuando conecto el FTDI al dispositivo. Le mando comandos desde el Mega pero no hace nada. Debería mandar 'OK(comando)' o 'ERR' si la transmisión es correcta.

Os adjunto el código que estoy probando:

#include <String.h>

void setup() {
  Serial.begin(9600); // PC - Mega
  Serial.println("SERIAL 1 ON");
  Serial3.begin(9600); // Mega - Módulo
  delay(1000);
}

void loop() {
  if(Serial.available()) { // Mando comando desde PC
    String entrada_PC = Serial.readStringUntil('\r');
    entrada_PC = entrada_PC + '\r';
    Serial3.print(entrada_PC);
  }

  if(Serial3.available()) { // Recibo mensaje del módulo
    String entrada_modulo = Serial3.readStringUntil('\r');
    Serial.println(entrada_modulo); 
  }
}

¿Puede ser que no esté enviando los strings con el formato correcto?

Gracias de antemano por vuestra ayuda.

EDIT: Corrijo el envío de entrada_PC desde Serial3

Tengo la impresión de que estás esperando un CR en la respuesta, pero que en la respuesta no da CR.

Para descartar problemas de configuración de los piertos o con los cables. Prueba con este programa:

#include <String.h>

void setup() {
  Serial.begin(9600); // PC - Mega
  Serial.println("SERIAL 1 ON");
  Serial3.begin(9600); // Mega - Módulo
  delay(1000);
}

void loop() {

#include <String.h>

void setup() {
  Serial.begin(9600); // PC - Mega
  Serial.println("SERIAL 1 ON");
  Serial3.begin(9600); // Mega - Módulo
  delay(1000);
}

void loop() {
  if(Serial.available()) {
    Serial3.write(Serial.read());
  }

  if(Serial3.available()) {
    Serial.write(Serial3.read());
  }
}

Nota: no lo he probado, ni tan siquiera garantizo que compile.

Confirma que las respuestas son con CR al final.

Bueno, si el problema fuera que el dispositivo reacciona (activa una luz) pero no se reciben sus respuestas por el puerto serie no estaría tan mal.

La cosa es que no responde de ninguna forma. Ahora, si lo enchufo al PC y abro monitor serie con CR si hay comunicación y actúa según los comandos que le envíe.

He probado con tu código y tampoco. Ni devuelve mensaje ni se activa.

EDITADO:

Al final he abierto el dispositivo para comprobar la electrónica. Su salida USB funciona también con un FT232RL, igual que el que del NANO.

Por tanto el problema está ahí, que no puedes comunicar dos FT232RL porque este chip funciona sólo como esclavo y no puede usarse como host (y uno de ellos tiene que serlo).

He tenido la suerte de que la placa madre del dispositivo, que funciona con un PIC 18F6527, tiene toda la electrónica de comunicación en una plaquita separada y usa conectores de 4 pines (VCC, GND, RX y TX) para conectarse a ella. Así que me he saltado los FTDI y he conectado directamente GND, RX y TX del Mega y la comunicación va perfecta.