Created
November 3, 2017 06:44
-
-
Save esmarr58/334072782e3beb5c1db212362dc703dd to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <SoftwareSerial.h> // se declara la función SoftwareSerial | |
#include <TinyGPS.h> // se incluye la librería TinyGPS | |
/* | |
Este código de ejemplo muestra el uso normal de un objeto TinyGPS. | |
Se requiere el uso de SoftwareSerial, y se supone que tiene una | |
4800 baudios dispositivo GPS conectado en serie en los pines 3 (RX) y 4 (TX). | |
*/ | |
TinyGPS gps; | |
SoftwareSerial ss(4, 3); // Se declara los pines 4 y 3 como TX y RX | |
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); | |
void setup() | |
{ // declaración de datos textuales que veremos en | |
Serial.begin(115200); //El monitor serial | |
Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version()); | |
Serial.println("by Mikal Hart"); | |
Serial.println(); | |
Serial.println("Sats HDOP Latitude Longitude Chars Sentences Checksum"); | |
Serial.println(" (deg) (deg) RX RX Fail"); | |
Serial.println("---------------------------------------------------------"); | |
ss.begin(9600); | |
} | |
void loop() | |
{ | |
float flat, flon; | |
unsigned long age, date, time, chars = 0; | |
unsigned short sentences = 0, failed = 0; | |
static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002; | |
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); | |
print_float(flat, TinyGPS::GPS_INVALID_F_ANGLE, 10, 6); | |
print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 11, 6); | |
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 (ss.available()) | |
gps.encode(ss.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); | |
} | |
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); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment