He utilizado los pines 2 y 3 como entrada de serie de un módulo GPS. Tengo todo configurado correctamente, sin embargo, quiero realizar más tareas que solo leer un módulo GPS.
void setup() {
Serial.begin(9600);
///////////////////////////////////
// 9600 NMEA is the default baud rate
mySerial.begin(9600);
Serial.println("NMEA Sentences");
// uncomment this line to turn on only the "minimum recommended" data for high update rates!
mySerial.println(PMTK_SET_NMEA_OUTPUT_RMCONLY);
// uncomment this line to turn on all the available data - for 9600 baud you'll want 1 Hz rate
// mySerial.println(PMTK_SET_NMEA_OUTPUT_ALLDATA);
// Set the update rate
// 1 Hz update rate
mySerial.println(PMTK_SET_NMEA_UPDATE_1HZ);
// 5 Hz update rate- for 9600 baud you'll have to set the output to RMC only (see above)
// mySerial.println(PMTK_SET_NMEA_UPDATE_5HZ);
// 10 Hz update rate - for 9600 baud you'll have to set the output to RMC only (see above)
// mySerial.println(PMTK_SET_NMEA_UPDATE_10HZ);
//////////////////////////////////
}
Suponiendo que tengo todas las configuraciones, etc. correctas en mi código, lo cual hago, si tengo esto
void loop() {
if(mySerial.available()) {
Serial.print((char)mySerial.read());
}
}
y la oración NMEA se muestra bien. Sin embargo, quiero realizar más tareas, por lo que debo realizar algo como esto
void loop() {
// perform lots of other functions here
while(!otherFunctionsComplete) ... // Very time consuming code
// just want to read 1 full nmea sentence from gps
getGPSData();
}
void getGPSData() {
// wait here until i get the GPRMCA sentence
while (mySerial.available()) {
Serial.print((char)mySerial.read());
}
}
El problema es que solo obtengo el tamaño del búfer de 64 bytes de datos utilizando el segundo método. Quiero esperar y leer los bytes entrantes en la serie hasta que obtenga un '$ GPRMCA' y luego guarde el resto de los bytes. ¿Alguna ayuda con esto?