Usage Example for Arduino-GPS Data Retrieval
Last revision 2026/01/07
To use, simply create an instance of an object like this:
#include "TinyGPS.h"
TinyGPS gps;
Feed the object serial NMEA data one character at a time using the encode() method. (TinyGPS does not handle retrieving serial data from a GPS unit.) When encode() returns “true”, a valid sentence has just changed the TinyGPS object’s internal state. For example:
void loop()
{
while (Serial.available())
{
int c = Serial.read();
if (gps.encode(c))
{
// process new gps info here
}
}
}
You can then query the object to get various tidbits of data. To test whether the data returned is stale, examine the (optional) parameter “fix_age” which returns the number of milliseconds since the data was encoded.
long lat, lon;
unsigned long fix_age, time, date, speed, course;
unsigned long chars;
unsigned short sentences, failed_checksum;
// retrieves +/- lat/long in 100000ths of a degree
gps.get_position(&lat, &lon, &fix_age);
// time in hhmmsscc, date in ddmmyy
gps.get_datetime(&date, &time, &fix_age);
// returns speed in 100ths of a knot
speed = gps.speed();
// course in 100ths of a degree
course = gps.course();
Wiring Diagram

| GPS receiver | Arduino |
|---|---|
| VCC | VCC |
| GND | GND |
| RX | TX |
| TX | RX |
Sample Code
Library:TinyGPS V1.3
#include <TinyGPS.h>
#include <LiquidCrystal.h>
TinyGPS gps;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //LCD driver pins
int led = 13;
long lat, lon;
unsigned long fix_age, time, date, speed, course;
unsigned long chars;
unsigned short sentences, failed_checksum;
//int year;
//byte month, day, hour, minute, second, hundredths;
int DEG;
int MIN1;
int MIN2;
void LAT(){ //Latitude state
DEG=lat/1000000;
MIN1=(lat/10000)%100;
MIN2=lat%10000;
lcd.setCursor(0,0); // set the LCD cursor position
lcd.print("LAT:");
lcd.print(DEG);
lcd.write(0xDF);
lcd.print(MIN1);
lcd.print(".");
lcd.print(MIN2);
lcd.print("' ");
}
void LON(){ //Longitude state
DEG=lon/1000000;
MIN1=(lon/10000)%100;
MIN2=lon%10000;
lcd.setCursor(0,1); // set the LCD cursor position
lcd.print("LON:");
lcd.print(DEG);
lcd.write(0xDF);
lcd.print(MIN1);
lcd.print(".");
lcd.print(MIN2);
lcd.print("' ");
}
void setup()
{
Serial.begin(115200); //Set the GPS baud rate.
pinMode(led, OUTPUT);
lcd.begin(16, 2); // start the library
lcd.setCursor(0,0); // set the LCD cursor position
lcd.print("GPS test"); // print a simple message on the LCD
delay(2000);
}
void loop()
{
while (Serial.available())
{
digitalWrite(led, HIGH);
int c = Serial.read(); // Read the GPS data
if (gps.encode(c)) // Check the GPS data
{
// process new gps info here
}
}
digitalWrite(led, LOW);
gps.get_position(&lat, &lon, &fix_age); // retrieves +/- lat/long in 100000ths of a degree
gps.get_datetime(&date, &time, &fix_age); // time in hhmmsscc, date in ddmmyy
//gps.crack_datetime(&year, &month, &day, //Date/time cracking
//&hour, &minute, &second, &hundredths, &fix_age);
LAT();
LON();
}
Was this article helpful?
