The NeoGPS site has quantitive numbers for speed, RAM footprint, and program size. I assume you have read those. Other unique attributes:
1) NeoGPS was designed to preserve the GPS solution that is being calculated by the GPS device. This means that NeoGPS tracks
* Validity - presence or absence of individual fields
* Accuracy - no float variables, micros() timestamps, careful math calculations
* Coherency - GPS update interval boundaries preserved (old data not mixed with new)
- Configurability - Most applications do not use all sentences and all fields. Those characters can be quickly skipped, saving even more program space, RAM and execution time. The fix buffer size can also be adjusted for sketches that have latency (e.g., SD loggers).
2) The NeoGPS examples were designed to give beginners a good place to start. Many questions here are the result of modifying other libraries' example programs. They are "fragile" WRT to modifications, because they weren't written with that goal in mind.
Many other libraries' examples simply print too much. Because the print has to wait for the characters to go out, the input buffer gets filled and overflows. It may work at certain speeds or with certain devices, but not always.
The TinyGPS examples use a routine called smartDelay. It's not. This leads beginners down the path of a blocking program, keeping them from learning the "Blink Without Delay" technique. It gets more difficult to add new behavior, because the old behavior has delays that can't be avoided without restructuring the program. I see you are using delay in your code, so I'm not sure you'll understand this advantage.
The Adafruit_GPS examples use a TIMER (!) to read characters from the input buffer to a sentence buffer (a copy) that gets searched (string compares) for various terms before anything gets parsed, without verifying the checksum. When using a software serial port, this is asking for invalid data.
To avoid the need for a "smart" delay or for using a precious TIMER resource, NeoGPS examples show how to parse GPS data during the RX character interrupt.
3) Somewhat subjectively, the NeoGPS methods are designed to make the resulting sketch readable. IMO, this is the single most important quality of a sketch you are trying to understand. Here is your snippet, rewritten for NeoGPS, without delays:
NeoGPS::Location_t clues[ 10 ];
uint8_t updates = 0;
void gps_clue()
{
while (gps.available( gpscom )) {
gps_fix fix = gps.read();
updates++;
if ((updates >= 6) && fix.valid.location) {
updates = 0;
distance = fix.location.DistanceKm( clues[ current_clue ] );
// Serial.print("Distance: "); Serial.println(distance); // debug in serial monitor if needed
}
}
}
Which one would you rather read? ![]()
So if you really don't care about any of those things, there are no advantages. If it ain't broke...
Cheers,
/dev