Jedná se mi o to, abych si vyžádal pozici z modulu třeba každé 2 minuty či při velké změně pohybu začal tento časový rozestup vyžádání snižovat.
Původně jsem situaci chtěl řešit přes "delay". Ale na tom jsem selhal protože se mi ztrácela data....
Respektive, když nepoužiji delay tak načtu všechny informace ale refrest je každou sekundu či i méně:
- lon
- lat
- alt
- pocet satelitu
- presnost
....
Když jsem použil delay tak se mi již nenačetla polovina informací.
Máte někdo zkušenosti s načítáním gps souřadnic třeba na vyžádání přes loop každé 2 minuty či při velké změně polohy oproti předešlé (diff) tak snížení tohoto rozestupu?
Za rady děkuji.
Kód: Vybrat vše
//Libraries
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
int RXPin = 4;
int TXPin = 3;
int GPSBaud = 9600;
String dateString = "";
String timeString = "";
String lonString = "";
String latString = "";
TinyGPSPlus gps;
SoftwareSerial gpsSerial(RXPin, TXPin);
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address, if it's not working try 0x27.
void setup(){
lcd.begin(20,4); // iInit the LCD for 20 chars 4 lines
lcd.setCursor(0,0); //First line
lcd.setCursor(0,0);
lcd.print("Lat: ");
lcd.setCursor(0,1);
lcd.print("Lon: ");
lcd.setCursor(0,2);
lcd.print("Alt: ");
Serial.begin(9600);
gpsSerial.begin(GPSBaud);
}
void loop()
{
while (gpsSerial.available() > 0)
if (gps.encode(gpsSerial.read()))
lcd.clear();
displayInfo();
//Serial.println(gpsSerial.read());
Serial.print("Sentences that failed checksum=");
Serial.println(gps.failedChecksum());
// Testing overflow in SoftwareSerial is sometimes useful too.
Serial.print("Soft Serial device overflowed? ");
Serial.println(gpsSerial.overflow() ? "YES!" : "No");
if (millis() > 5000 && gps.charsProcessed() < 10)
{
Serial.println(F("No GPS detected"));
while(true);
}
}
void displayInfo()
{
dateString = "";
timeString = "";
if (gps.location.isValid())
{
Serial.print("Latitude: ");
Serial.println(gps.location.lat(), 6);
lcd.setCursor(0,0);
lcd.print("Lat: " + String(gps.location.lat(), 6));
Serial.print("Longitude: ");
Serial.println(gps.location.lng(), 6);
lcd.setCursor(0,1);
lcd.print("Lon: " + String(gps.location.lng(), 6));
Serial.print("Altitude: ");
Serial.println(gps.altitude.meters());
lcd.setCursor(0,2);
lcd.print("Alt: " + String(gps.altitude.meters()) + "m");
lcd.setCursor(15,1);
lcd.print("S: " + String(gps.satellites.value()));
Serial.print("Satelites: ");
Serial.println(gps.satellites.value());
lcd.setCursor(13,2);
lcd.print("P: " + String(gps.hdop.value()));
Serial.print("Precision: ");
Serial.println(gps.hdop.value());
}
else
{
Serial.println("Location: Not Available");
lcd.setCursor(0,0);
lcd.print("No location.");
}
Serial.print("Date: ");
if (gps.date.isValid())
{
Serial.print(gps.date.month());
Serial.print("/");
Serial.print(gps.date.day());
Serial.print("/");
Serial.println(gps.date.year());
dateString = String(gps.date.day()) + "-" + String(gps.date.month()) + "-" + String(gps.date.year());
}
else
{
Serial.println("Not Available");
dateString = "No date";
}
Serial.print("Time: ");
if (gps.time.isValid())
{
if (gps.time.hour() < 10)
{
Serial.print(F("0"));
timeString = "0";
}
Serial.print(gps.time.hour());
timeString = timeString + String(gps.time.hour()) + ":";
Serial.print(":");
if (gps.time.minute() < 10)
{
Serial.print(F("0"));
timeString = timeString + "0";
}
Serial.print(gps.time.minute());
timeString = timeString + String(gps.time.minute()) + ":";
Serial.print(":");
if (gps.time.second() < 10)
{
Serial.print(F("0"));
timeString = timeString + "0";
}
Serial.print(gps.time.second());
timeString = timeString + String(gps.time.second()); //+ ".";
Serial.print(".");
if (gps.time.centisecond() < 10)
{
Serial.print(F("0"));
//timeString = timeString + "0";
}
Serial.println(gps.time.centisecond());
//timeString = timeString + String(gps.time.centisecond());
}
else
{
Serial.println("Not Available");
timeString = "No time";
}
lcd.setCursor(0,3);
lcd.print(timeString);
lcd.setCursor(20-dateString.length(),3);
lcd.print(dateString);
Serial.println();
Serial.println();
//delay(1000);
}