have been using the tiny gps library and a venus GPS (http://www.sparkfun.com/products/11058
) . Got it reading the GPS today and parsing the data using the library. Thing is the data comes from the GPS latitude and longitude minutes to 6 decimal places but the library only returns 5.
The 6th dp wanders a little but is still useful. There is plenty of room in the long int that stores the lat and long - full data for each of latitude and longituse will be 8 numbers, i.e. 2 numbers for minutes and 6 decimal places.
No idea why you would truncate data like this!
Have looked in the library and being cpp is a little opaque for me who only generally uses C and matlab. It looks like the offending function is:
unsigned long TinyGPS::parse_degrees()
unsigned long left = gpsatol(_term);
unsigned long tenk_minutes = (left % 100UL) * 10000UL;
for (p=_term; gpsisdigit(*p); ++p);
if (*p == '.')
unsigned long mult = 1000;
tenk_minutes += mult * (*p - '0');
mult /= 10;
return (left / 100) * 100000 + tenk_minutes / 6;
Any ideas how to tweak this so that i can retain the last dp that i can see is there on the raw stream?
The basic code to get the data is below.
btw there is a method to get the data out as a float but it is still truncated.
#define RXPIN 10
#define TXPIN 11
NewSoftSerial nss(RXPIN, TXPIN);
long lat, lon;
unsigned long age, time, date, speed, course;
unsigned long chars;
unsigned short sentences, failed_checksum;
Serial.begin(57600); // Radio serial
// set the data rate for the SoftwareSerial port
// prints title with ending line break
int c = nss.read();
gps.get_position(&lat, &lon, NULL);
Serial.print("Latitude: "); Serial.println(lat);
Serial.print("Longitude: "); Serial.println(lon);
static bool feedgps()