@ pistolero992000
I modifed your code a bit just so I only get lat and lon but for some reason the GPS coordinates don't seem to update as fast as before? Could anybody tell me how to fix this? Like make it update at least 5 times a second, I know this GPS unit does up to 10 times per second.
Here is the modified code:
#include <TinyGPS.h>
/* This sample code demonstrates the normal use of a TinyGPS object.
It requires the use of SoftwareSerial, and assumes that you have a
4800-baud serial GPS device hooked up on pins 4(rx) and 3(tx).
*/
TinyGPS gps;
//SoftwareSerial ss(4, 3);
static void smartdelay(unsigned long ms);
static void print_float(float val, float invalid, int len, int prec);
static void print_int(unsigned long val, unsigned long invalid, int len);
static void print_date(TinyGPS &gps);
static void print_str(const char *str, int len);
//double getCurrentLatitude();
//double getCurrentLongitude();
//double cLatitude = 0.0;
//double cLongitude = 0.0;
//
//public double getCurrentLatitude(){
// return cLatitude;
//}
//
//double getCurrentLongitude(){
// return cLongitude;
//}
void setup()
{
Serial.begin(115200);
Serial1.begin(9600);
}
void loop()
{
double flat, flon = 0.0000000000000;
unsigned long age, date, time, chars = 0;
unsigned short sentences = 0, failed = 0;
// print_int(gps.satellites(), TinyGPS::GPS_INVALID_SATELLITES, 5);
// print_int(gps.hdop(), TinyGPS::GPS_INVALID_HDOP, 5);
gps.f_get_position(&flat, &flon, &age);
// gps.f_get_position(&cLatitude,&cLongitude, &age);
//print_float(flat, TinyGPS::GPS_INVALID_F_ANGLE, 13, 8);
//print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 13, 8);
float lati = (float)flat;
float longi = (float)flon;
Serial.print(" ");
Serial.print(lati, 8);
Serial.print(" ");
Serial.print(longi, 8);
smartdelay(0);
//cLatitude = flat;
//cLongitude = flon;
// print_float(getCurrentLatitude(), TinyGPS::GPS_INVALID_F_ANGLE, 13, 8);
// print_float(getCurrentLongitude(), TinyGPS::GPS_INVALID_F_ANGLE, 13, 8);
// print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
// print_date(gps);
// print_float(gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 7, 2);
// print_float(gps.f_course(), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
// print_float(gps.f_speed_kmph(), TinyGPS::GPS_INVALID_F_SPEED, 6, 2);
// print_str(gps.f_course() == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(gps.f_course()), 6);
// print_int(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0xFFFFFFFF : (unsigned long)TinyGPS::distance_between(flat, flon, LONDON_LAT, LONDON_LON) / 1000, 0xFFFFFFFF, 9);
// print_float(flat == TinyGPS::GPS_INVALID_F_ANGLE ? TinyGPS::GPS_INVALID_F_ANGLE : TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
// print_str(flat == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON)), 6);
//
// gps.stats(&chars, &sentences, &failed);
// print_int(chars, 0xFFFFFFFF, 6);
// print_int(sentences, 0xFFFFFFFF, 10);
// print_int(failed, 0xFFFFFFFF, 9);
Serial.println();
smartdelay(1000);
}
static void smartdelay(unsigned long ms)
{
unsigned long start = millis();
do
{
while (Serial1.available())
gps.encode(Serial1.read());
} while (millis() - start < ms);
}
static void print_float(float val, float invalid, int len, int prec)
{
if (val == invalid)
{
while (len-- > 1)
Serial.print('*');
Serial.print(' ');
}
else
{
Serial.print(val, prec);
int vi = abs((int)val);
int flen = prec + (val < 0.0 ? 2 : 1); // . and -
flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
for (int i=flen; i<len; ++i)
Serial.print(' ');
}
smartdelay(0);
}
/*
If data is invalid, print out *******
otherwise print out buffer
*/
static void print_int(unsigned long val, unsigned long invalid, int len)
{
char sz[32];
if (val == invalid)
strcpy(sz, "*******");
else
sprintf(sz, "%ld", val);
sz[len] = 0;
for (int i=strlen(sz); i<len; ++i)
sz[i] = ' ';
if (len > 0)
sz[len-1] = ' ';
Serial.print(sz);
smartdelay(0);
}
static void print_date(TinyGPS &gps)
{
int year;
byte month, day, hour, minute, second, hundredths;
unsigned long age;
gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
if (age == TinyGPS::GPS_INVALID_AGE)
Serial.print("********** ******** ");
else
{
char sz[32];
sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d ",
month, day, year, hour, minute, second);
Serial.print(sz);
}
print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
smartdelay(0);
}
static void print_str(const char *str, int len)
{
int slen = strlen(str);
for (int i=0; i<len; ++i)
Serial.print(i<slen ? str[i] : ' ');
smartdelay(0);
}
So now the coordinates themselves are put into float variables lati and longi, this way I can use the data while the GPS continuously updates.
So now the output is just like this:
34.073620 -118.400356
34.073620 -118.400356
34.073620 -118.400356
34.073620 -118.400356
34.073620 -118.400356
34.073620 -118.400356
34.073620 -118.400356
34.073620 -118.400356
34.073620 -118.400356
34.073620 -118.400356
34.073620 -118.400340
34.073620 -118.400340
34.073620 -118.400340
34.073620 -118.400340
34.073620 -118.400340
34.073620 -118.400340
34.073620 -118.400340
34.073620 -118.400343
34.073620 -118.400356
34.073620 -118.400356
34.073620 -118.400356
34.073620 -118.400356
34.073620 -118.400356
34.073618 -118.400356
34.073618 -118.400352
34.073618 -118.400352
Notice how the location stays the same for a bit, how do I make it so it updates faster? Any help or suggestions will be much appreciated, thanks