Uso del módulo serie múltiple de Arduino

Estoy atascado en esta cosa aparentemente simple. Tengo un módulo GPS NMEA. No importa cómo funcione, solo transmite un flujo de datos en serie a una velocidad de transmisión de 38400.

Tengo un arduino Mega que tiene varios módulos seriales de hardware. Si conecto directamente GPS Tx al pin Arduinos Tx (y programo arduino para que no use el módulo serial predeterminado Serial0), entonces puedo observar las oraciones GPS sin procesar transmitidas por el módulo GPS usando el monitor serial arduino.

Lo que realmente quiero es leer el módulo GPS al Serial1puerto arduino y reenviar los datos recibidos a través del puerto serie predeterminado Serial0sin hacer nada. De modo que debería poder monitorear los datos del monitor en serie exactamente como en el caso anterior.

Intenté algo como lo siguiente, pero no funciona (da una secuencia de dígitos, intenté hacer todos los cambios posibles pero nada funcionó)

void setup(){
  Serial.begin(38400); // the default serial module, serial0
  Serial1.begin(38400); // GPS is connected to this
}

void loop(){
  if(Serial1.available()){ // if GPS data available
    Serial.print(Serial1.read()); // write it to serial0
  }
}

Espero que alguien aquí pueda darme alguna solución.

¿No debería estar conectando GPS Tx a Arduino Rx (no Tx)?
@RedGrittyBrick no, en el primer caso debería ser Tx porque arduino no recibe nada, GPS Tx se comporta como arduino Tx.

Respuestas (1)

Serial::print()convierte los bytes a una representación ASCII. Utilice Serial::write()en su lugar.

Como dijo Ignacio, Serial.print()convierte la entrada a ASCII mientras Serial.write()"pasa" los datos binarios. Aquí está el enlace a la referencia de Arduino: arduino.cc/en/Serial/Write