Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Tracker APRS do samochodu
#7
Mam pewien problem z odczytem danych z GPS-u. Jeśli dane z GPS-u odczytam bezpośrednio na Serial to dostaje czytelny przekaz NMEA:
Kod ARDUINO:
Kod:
#include <SoftwareSerial.h>
#include<string.h>
#include <Wire.h>

SoftwareSerial nss(3, 4);

void setup()
{
Serial.begin(115200);
nss.begin(9600);

}
void loop()
{
  if (nss.available()) Serial.write(nss.read());
    
}

W odpowiedzi na serial monitorze dostaje dane w postaci:

Cytat:$GPGSA,A,3,24,26,28,12,15,18,22,,,,,.22,N,0.41,K,A*34
$GPGGA,070017.000,5428.5821,N,01822.3515,E,1,7,0.99,162.6,M,34.0,M,,*50
$GPGSA,A,3,24,26,28,12,15,18,22,,,,,$GPGGA,070019.000,5428.5822,N,01822.3513,E,1,7,0.99,162.6,M,34.0,M,,*5B
$GPGSA,A,3,24,26,28,12,15,18,22,,,,,,1.33,0.99,0.89*04
$GPRMC,070019.000,A,5428.5822,N,01822.3513,E,0.26,118.04,290714,,,A*6B
$GPVTG,118.04,T,,M,0.26,N,0.48,K,A*39
$GPGGA,070020.000,5428.5822,N,01822.3512,E,1,7,0.99,162.6,M,34.0,M,,*50
$GPGSA,A,3,24,26,28,12,15,18,22,,,,,,1.33,0.99,0.89*04

Jeśli natomiast próbuje odczytać te dane do zmiennej, tak aby je potem obrobić, to niestety dane są mocno "pocięte".

Kod:
#include <SoftwareSerial.h>
#include<string.h>
#include <Wire.h>

SoftwareSerial gps(3, 4);

void setup()
{
Serial.begin(115200);
gps.begin(9600);

}
void loop()
{
  Serial.flush();
  char sign;
  String gps_string = " ";
          if( gps.available()) sign = gps.read();
           if (sign == '$')
          {
            if (gps.available()) sign = gps.read();
            while (sign != 13)
           {
           gps_string = gps_string + char(sign);  
           if (gps.available()) sign = gps.read();
           //delay(10);
           }
          
         }
           if (gps_string != " ") Serial.println(gps_string);
}

I wyglądają mniej więcej tak:

Cytat: GPGGA,072234.000,5428.5814,N,01822.3484,E,1,8,0.91,159.7,M,34.0,M,,*50
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA$GPGGA,072236.000,5428.5815,N,01822.3485,E,1,8,0.91,159.7,M,34.0,M,,*52
33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333$GPGGA,072237.000,5428.5815,N,01822.3486,E,1,8,0.91,159.7,M,34.0,M,,*
GPGGA,072238.000,5428.5816,N,01822.3486,E,1,8,0.92,159.7,M,34.0,M,,*5F
16,N,01822.3486,E,1,8,0.91,159.7,M,34.0,M,A112.,01G1
GPGGA,072240.000,5428.5816,N,01822.3486,E,1,8,0.91,159.7,M,34.0,M,,*53
GPGSA,A,3,26,,1,,1.9*2G,,45,4,4,1,5*G41,,25,,,,2
G31100,112$P,54586,286,2229,
GPGGA,072241.000,5428.5815,N,01822.3487,E,1,8,0.91,159.7,M,34.0,M,,*50

Czy jest jakiś sposób na zsynchronizowanie odczytu danych z portu szeregowego ?
Odpowiedz


Wiadomości w tym wątku
Tracker APRS do samochodu - przez SQ2PPJ - 17-07-2014, 10:42

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości