• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Tiny GPS++, Problem z koordynatami
#1
Cześć.
Urządzenie do którego wysłam dane, aby prawidłowo wyświetliło Liteki E, N, W, S przy współrzędnych potrzebuje  następujących danych:
(01 =N.W),(02 =S.E),(03 =N.E),(04 =S.W).

W tym celu zrobiłem taki szkic do pobierania danych, potem ich sprawdzenia i na końcu zastosowaniu odpowiedniej cyfry dla aktualnie nadawanych liter przy współrzędnych.
Kod:
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
TinyGPSPlus gps;
TinyGPSCustom Lat1(gps, "GPGGA", 3);
TinyGPSCustom Lon1(gps, "GPGGA", 5);

int cord;
int co1 = 01;
int co2 = 02;
int co3 = 03;
int co4 = 04;

char N = 'N';
char S = 'S';
char W = 'W';
char E = 'E';
void setup()
{
  Serial.begin(115200);
 
}
void loop()
{
Serial.print(" ALT="); Serial.print(gps.altitude.meters());
Serial.print(" LAT="); Serial.print(Lat1.value());
Serial.print(" LON="); Serial.print(Lon1.value());
Serial.print(" cord="); Serial.print(cord);
Serial.print(" SATS="); Serial.println(gps.satellites.value());

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

//(01 =N.W)(02 =S.E)(03 =N.E)(04 =S.W)
if ( Lat1.value() == N && Lon1.value() == E)
{
  cord = co3;
}
if ( Lat1.value() == N&& Lon1.value() == W)
{
  cord = co1;
}
if ( Lat1.value() == S && Lon1.value() == W)
{
  cord = co4;
}
if ( Lat1.value() == S && Lon1.value() == E)
{
  cord = co2;
}

}


Niestety chyba coś źle napisałem bo program nie działa Sad

W terminalu odczytuje prawidłowe Literki z GPS ale dane wyjściowe "cord = 0 " a powinno wyświetlić 03 dla E, N.

   

Może ktoś pomoże w rozwiązaniu problemu.
 
Odpowiedź
#2
Int to nie będzie =01 tylko 1, a 01 może traktować jak liczby ósemkowe, może jako 0, choć nie wiem czy tu ma to akurat znaczenie. == dla porównania dla napisów to też może być śliski temat.
Sprawdź czy ify się wykonują, wsadź jakiś wydruk na serial do każdego, potem ewentualnie dodaj else i sprawdź jakie są wyniki porównań gdy if się nie spełnia.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
Dziś to już zgłupiałem normalnie. Printuje A==A to daje 1 czyli działa ale jak zrobiłem takie coś:
Kod:
Serial.print(" DANE="); Serial.print(Lat1.value());
Serial.print(", TEST1="); Serial.print(Lat1.value() == 'N' );
Serial.print(", TEST2="); Serial.print(Lat1.value()== N );
Serial.print(", TEST3="); Serial.print(A == A);
Otrzymałem:

DANE=N, TEST1=0, TEST2=0, TEST3=1

Czyli porównanie nie działa ale czego ??
 
Odpowiedź
#4
Ostatni przykład pokazał, że porównanie działa. Widocznie w Lat1.value() nie ma oczekiwanego znaku.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#5
Zadziałał bo na sztywno miało zadeklarowane (A == A)

Skoro Serial.print(" DANE="); Serial.print(Lat1.value()); daje wynik :  DANE=N

To po podstawieniu do  (Lat1.value() == 'N' ); (Lat1.value()== N ); powinno dać wynik pozytywny (1)  niestety jest negatywny  (TEST1=0, TEST2=0)
 
Odpowiedź
#6
Zobacz czy ((char) Lat1.value()=='N') daje 1. A w ogóle zajrzyj do biblioteki co zwraca ta metoda, bo może to jest string czy inne coś i to jest problemem.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości