Skocz do zawartości

Biblioteka TinyGPSPlus.h dla GPS - jak sprawdzić status urządzenia?


LeciZNamiPilot

Pomocna odpowiedź

40 minut temu, LeciZNamiPilot napisał:

 

Wiem, ze GPS długo (kilkanaście sekund) wstaje, dać delay(20000) po linii:

ss.begin(GPSBaud);

?

Ja używałem co prawda innych libsow, ale nigdy nie dawałem żadnych delay'ow, a i w przykładach nigdy tego nie zaobserwowałem...

  • Lubię! 1
Link do komentarza
Share on other sites

1 godzinę temu, LeciZNamiPilot napisał:

Korzystam z TinyGPSPlus.h. Jak sprawdzić status GPS, czy śpi, czy dopiero wstaje, etc. ? Próbowałem kilka przykładów do niej, ale kody nie działają.

Wiem, ze GPS długo (kilkanaście sekund) wstaje, dać delay(20000) po linii:

ss.begin(GPSBaud);

?

 

 

 

 

Nie bardzo wiem o jaki status Ci chodzi?

Albo jest złapany FIX, albo go jeszcze nie ma. Pierwsze słyszę o usypianiu/wstawaniu.

Delaye są bez sensu. Trzeba po prostu co jakiś czas sprawdzać stan.

Ja używam warunku:

if (gps.location.isValid() && (gps.location.age() < 2000))

  • Lubię! 2
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

char buffer[25];

void showData()
{

  if (gps.location.isValid() && (gps.location.age() < 2000))
   {
   sprintf(buffer, "LATITUDE-%f", gps.location.lat());
   Serial.println(buffer);

   sprintf(buffer, "LONGITUDE-%f", gps.location.lng());
   Serial.println(buffer);
}

  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println(F("No GPS detected: check wiring."));
    while(true);
  }
}

Tak będzie OK?

Link do komentarza
Share on other sites

13 godzin temu, LeciZNamiPilot napisał:

@kostuch i tylko i wyłącznie tego warunku???

Tak, tylko i wyłącznie ten warunek.

A masz wogóle gdzieś odczyt gps?

while (Serial.available()) gps.encode(Serial.read());

 

  • Lubię! 1
Link do komentarza
Share on other sites

Mam coś takiego:
 

#include <HardwareSerial.h>
#include <TinyGPSPlus.h>

HardwareSerial GPSSerial (2);
TinyGPSPlus gps;

void setup()
{
  Serial.begin(115200);
  GPSSerial.begin ( 9600, SERIAL_8N1, 16, 17 ); // begin GPS hardware serial
}

void loop()
{

 while (GPSSerial.available()) gps.encode(GPSSerial.read());
 
      displayInfo();

  if (millis() > 10000 && gps.charsProcessed() < 10)
  {
    Serial.println(F("No GPS detected: check wiring."));
    while(true);
  }
}

void displayInfo()
{
  Serial.print(F("Location: "));
  if (gps.location.isValid())
  {
    Serial.println(gps.location.lat(), 9);
    Serial.println(F(","));
    Serial.println(gps.location.lng(), 9);
  }
  else
  {
    Serial.println(F("INVALID"));
  }
  delay(300);
}

 

Link do komentarza
Share on other sites

(edytowany)

Hm... a nie prościej po prostu użyć Serial1 czy Serial2? Bo ten HardwareSerial to taki trochę starawy jest...

Coś w stylu:

#define GPSSerial Serial2
  
...
Serial2.begin(115200, SERIAL_8N1, SER2_RX_PIN, SER2_TX_PIN);

gdzie SER2_TX_PIN i SER2_RX_PIN sobie zdefiniujesz?

Ja tak przynajmniej robię do połączenia z RPi w moim krasnoludku.

 

Edytowano przez ethanak
  • Lubię! 1
Link do komentarza
Share on other sites

(edytowany)

Ale kombinacje...

Wywal całkiem ten include hardwareserial i ten gpsserial. Na co Ci to?

Zacznij od najprostszego loop:

loop()
{
  bool fix;
  while (Serial.available()) gps.encode(Serial.read());	
  
  if (gps.location.isValid() && (gps.location.age() < 2000) && !fix)
  {
    printf("FIX!");
    fix = true;
  }
  else fix = false;
}

Jak zadziała, to sobie komplikuj logikę do woli.

 

Acha...

Zakładam, że Rx procka podłączasz do gps, a Tx idzie na konsolę.

Edytowano przez kostuch
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.