From 240f1bbdea4754bd6d8322b9e3b8aa7a6b41af58 Mon Sep 17 00:00:00 2001 From: Tony DiCola Date: Mon, 11 Aug 2014 11:01:50 -0700 Subject: [PATCH] Add fixed point minute scaling back with correct floating point conversion. --- Adafruit_GPS.cpp | 16 ++++++++-------- Adafruit_GPS.h | 6 +++--- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Adafruit_GPS.cpp b/Adafruit_GPS.cpp index d5c3205..fd5503d 100755 --- a/Adafruit_GPS.cpp +++ b/Adafruit_GPS.cpp @@ -72,9 +72,9 @@ boolean Adafruit_GPS::parse(char *nmea) { p += 3; // skip decimal point strncpy(degreebuff + 2, p, 4); degreebuff[6] = '\0'; - long minutes = atol(degreebuff) * 10; + long minutes = 50 * atol(degreebuff) / 3; latitude_fixed = degree + minutes; - latitude = latitude_fixed / 100000.0F; + latitude = degree / 100000 + minutes * 0.000006F; p = strchr(p, ',')+1; if (p[0] == 'N') lat = 'N'; @@ -92,9 +92,9 @@ boolean Adafruit_GPS::parse(char *nmea) { p += 3; // skip decimal point strncpy(degreebuff + 2, p, 4); degreebuff[6] = '\0'; - minutes = atol(degreebuff) * 10; + minutes = 50 * atol(degreebuff) / 3; longitude_fixed = degree + minutes; - longitude = longitude_fixed / 100000.0F; + longitude = degree / 100000 + minutes * 0.000006F; p = strchr(p, ',')+1; if (p[0] == 'W') lon = 'W'; @@ -151,9 +151,9 @@ boolean Adafruit_GPS::parse(char *nmea) { p += 3; // skip decimal point strncpy(degreebuff + 2, p, 4); degreebuff[6] = '\0'; - long minutes = atol(degreebuff) * 10; + long minutes = 50 * atol(degreebuff) / 3; latitude_fixed = degree + minutes; - latitude = latitude_fixed / 100000.0F; + latitude = degree / 100000 + minutes * 0.000006F; p = strchr(p, ',')+1; if (p[0] == 'N') lat = 'N'; @@ -171,9 +171,9 @@ boolean Adafruit_GPS::parse(char *nmea) { p += 3; // skip decimal point strncpy(degreebuff + 2, p, 4); degreebuff[6] = '\0'; - minutes = atol(degreebuff) * 10; + minutes = 50 * atol(degreebuff) / 3; longitude_fixed = degree + minutes; - longitude = longitude_fixed / 100000.0F; + longitude = degree / 100000 + minutes * 0.000006F; p = strchr(p, ',')+1; if (p[0] == 'W') lon = 'W'; diff --git a/Adafruit_GPS.h b/Adafruit_GPS.h index 375cc6d..1cdad58 100755 --- a/Adafruit_GPS.h +++ b/Adafruit_GPS.h @@ -127,9 +127,9 @@ class Adafruit_GPS { uint16_t milliseconds; // Floating point latitude and longitude value in degrees. float latitude, longitude; - // Fixed point latitude and longitude value in 1/100000 degrees. - // For example a latitude of 4,767.99916 degrees would have a value of 476799916. - // More precise than the floating point value, but a little more difficult to use. + // Fixed point latitude and longitude value with degrees stored in units of 1/100000 degrees, + // and minutes stored in units of 1/100000 degrees. See pull #13 for more details: + // https://github.com/adafruit/Adafruit-GPS-Library/pull/13 int32_t latitude_fixed, longitude_fixed; float geoidheight, altitude; float speed, angle, magvariation, HDOP;