SQ2PPJ
Nowicjusz
Liczba postów: 19
Dołączył: 17-07-2014
|
RE: Tracker APRS do samochodu
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 ?
|
|