Skocz do zawartości

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


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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.