hola, espero estar en el foro correcto, soy principiante y con pocos conocimientos de programacion. He recibido una placa Arduino Mega 2560 que dispone de 3 puertos serie, en realidad 4 solo que uno lo dejo para comunicarme con el monitor arduino IDE, para recibir información y la tarea que me he propuesto, en principio, es recibir datos, en el puerto serie 1 (57600 baudios) de una IMU razor 9 DOF con 50hz de actualización y en el puerto serie 2 (115200 baudios) recibir datos de un gps venus, por ahora solo las palabras GPGGA, GPRMC y GPVTG, con 1hz (en un futuro otras palabras y hasta 20hz) y transmitirlos por un lado al monitor de arduino ide y por otro almacenarlos en un datalogger logomatic v2 que dispone de entrada serial y guarda los datos en microSD.
Ambos sensores IMU y GPS entregan la infromacion por puerto serie.
La IMU entrega la informacion en angulos Euler con el siguiente formato:
#YPR=13.10,0.35,2.43. guiñada (yaw en inglés), de cabeceo (pitch) y de alabeo (roll), ángulos de navegación por ejemplo de un avión.
El GPS sensor de posición global entrega su información NMEA en distintas palabras y su formato es:
$GPGGA,125402.899,3126.1165,S,06416.1804,W,1,04,3.3,0.0,M,14.2,M,,000055
$GPRMC,125402.899,A,3126.1165,S,06416.1804,W,000.0,000.0,130617,,,A66
$GPVTG,000.0,T,,M,000.0,N,000.0,K,A*0D
El programa que utilizo es muy sencillo y si bien puedo leer los datos en el monitor, cuando aparece la palabra GPGGA del gps se mezclan los datos con los de la IMU, como podrán apreciar mas abajo.
Este es mi programa:
------------------------------------------------------------------------
*/
void setup() {
// initialize serial ports:
Serial.begin(115200);
Serial1.begin(57600);
Serial2.begin(115200);
}
void loop() {
// read from port 1, send to port 0:IMU 50Hz
if (Serial1.available()) { if (Serial1.available()) {
int inByte = Serial1.read();
Serial.write(inByte);
}
}
// read from port 2, send to port 0:GPS solo GGA 1hz
if (Serial2.available()) {
int inByte = Serial2.read();
Serial.write(inByte);
}
}
He probado los puertos por separado y funcionan correctamente pero cuando habilito ambos la información que recibo esta mezclada apareciendo YPR, aunque alterado dentro de las palabras del gps:
#YPR=13.10,0.34,2.44
#YPR=13.10,0.33,2.43
#YPR=13.10,0.32,2.47
#YPR=13.10,0.33,2.48
#YPR=13.09,0.35,2.44
#YPR=13.09,0.36,2.45
#YPR=13.09,0.34,2.44
#YPR=13.10,0.38,2.41
#YPR=13.10,0.36,2.40
#YPR=13.12,0.37,2.40
#YPR=13.11,0.39,2.44
$GPGGA,121603.928,3126.1524,S#Y,PR=0163.4121,60..307,82.7439
,W,1,10,0.9,503.8,M,14.2,M,,000051
$GPRMC,121603#.YP9R=2138.,1A1,,0.3381,22.369.
1524,S,06416.0879,W,000.0,265.0,130617,,,A61
$G#PYVPRT=G1,3.210,605.3.7,02.,37T
,,M,000.0,N,000.0,K,A*0C
#YPR=13.10,0.33,2.39
#YPR=13.09,0.32,2.38
#YPR=13.09,0.31,2.38
#YPR=13.09,0.33,2.37
#YPR=13.10,0.34,2.34
#YPR=13.09,0.35,2.37
#YPR=13.10,0.37,2.36
#YPR=13.10,0.35,2.36
#YPR=13.10,0.34,2.38
#YPR=13.09,0.33,2.35
#YPR=13.09,0.35,2.35
#YPR=13.09,0.38,2.35
entiendo que probablemente la solución este en utilizar algún otro procedimiento como por ejemplo armando una trama o algo parecido pero no dispongo de los conocimientos aún. Agradecería me pudiesen indicar alguna linea de lectura (aunque he buscado en profundidad) o trabajo para solventar mi problema. gracias