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

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.