GPS Datenschrott aussortieren

Gast #639677
Lesenswert?

Hallo,
ich habe vor, GPS-Daten zu speichern, die immer wie folgt per UART 
reinkommen:
*boese = Usart_Rx();

Die Daten sehen so aus:
$GPGSA,A,3,02,04,05,14,30,,,,,,,,03.6,02.9,02.1*0A
$GPGSV,2,1,05,02,33,070,43,04,14,035,40,05,66,093,46,14,26,240,35*72
$GPGSV,2,2,05,30,85,057,47,,,,,,,,,,,,*43
$GPRMC,163411,A,5150.3752,N,00639.0283,E,000.0,000.0,170807,,,A*7E
$GPGGA,163412,5150.3752,N,00639.0286,E,1,05,02.9,00009.1,M,046.9,M,,*4E
Und das pro Sekunde...
So jetzt benötige aber nur Daten, die mit
$GPGGA beginnen.

Habe dazu zuersteinmal erucht in Visual C ein Programm zu schreiben 
(siehe Anhang), wenn es denn dort klappt setze ich es in C um für den 
µC...

Doch leider funktioniert es auf dem PC schon nicht so recht, wie es 
soll..

Wre dankbar für jeden Tipp, der mich in die richtige Richtung lenkt!
Angehängte Dateien:
Gast #639688
Lesenswert?

Ich würde das folgendermaßen lösen:

Daten zeilenweise einlesen, d.h. Daten byteweise vom USART abholen, bis 
ein CR oder LF kommt. Dann hast Du immer nur eine Zeile im Buffer. Und 
statt der verschachtelten IF-Abfragen würde ich mir mal strncmp(...) 
angucken und wenn Du die Daten in einen anderen Puffer übernehmen 
möchtest, strcpy(...) bzw. strncpy(...).
Gast #639689
Lesenswert?

Hi

In deinem Beispielstring fehlen die Zeilenendezeichen <CR><LF>, mit 
denen jeder NMEA-String abgeschlossen wird.
Da ich so etwas bisher nur mit Delphi bzw Assembler programmiert habe, 
kann ich dir auch nicht direkt weiterhelfen.
An deiner Stelle würde ich warten bis ein '$' empfangen wird. Dann den 
String einlesen. Überprüfen ob der String mit '$GPGGA' anfängt und die 
Daten verwerten oder verwerfen.

MfG Spess

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren