Tengo un programa, que realiza bastantes operaciones (cálculos matemáticos, tratamiento de cadenas, y escritura en servos).
Al utilizar escritura en servos necesito que la respuesta en ejecución sea lo más rápida posible, pero el problema viene con la lectura del puerto serie.
En el flujo normal del programa, hay un momento en el que debo leer del puerto serie, en concreto leo un GPS (el cual me da unas 5 líneas NMEA por pasada). Esto supone un tiempo de lectura de algo menos de un segundo. El caso es que de estas 5 líneas, solamente me interesa una.
La pregunta es. Es posible al realizar el (if(Serial.available()) leer los caracteres correspondientes a dicha línea e ignorar las demás dejando vacío el buffer de lectura hasta nuevo "available"??
Bueno, estoy viendo algunos comandos como "continue" o "Serial.flush()" que podrían servirme tal vez como salida al paso.
Lo que ahora veo es que puedo configurar el GPS para deshabilitar algunos mensajes, o aumentar la velocidad de comunicación. De esta forma podría minimizar tiempos. A ver si hay suerte.
Bueno, pues después de estar la tarde con ello liado, creo que he encontrado la solución que mejor funciona.
Aún cuando he prescindido de todas las líneas NMEA menos una del GPS, el pps o refresco que nos devuelve el GPS está limitado a una pasada por segundo.
De esta forma, si metíamos una sentencia (if(Serial.avaliable()) en el bucle principal del programa, el programa quedaría detenido hasta que no hubiera de nuevo información a leer del GPS.
Dado que no podía dejar ese tiempo sin refrescar los servos, la solución pasa por leer del puerto serie únicamente cuando tengamos certeza o creamos que habrá información. De este modo, no pararemos la ejecución del programa.
Para ello, basta con lanzar la sentencia (if(Serial.available()) cada ciertos ciclos de ejecución. En mi caso, y para un segundo, aproximadamente debo lanzarla cada 500 pasadas (intentaré bajar hasta que vea que empieza a esperar por información).
De esta forma, la actualización de servos es fluida: