PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Arduino + NL-552ETTL GPS



Zwerwelfliescher
08.03.2013, 19:29
Hallo,

nach langer Zeit melde ich mich mal wieder :)

Ich hatte leider wenig Zeit für Projekte, aber jetzt möchte ich einen GPS Empfänger mit einem NE-552ETTL GPS und einem Arduino bauen. Eigentlich wollte ich das ganze mit der RN-Control bauen, aber mit dem Arduino geht es einfach schneller und das Ergebnis ist das gleiche.

Es gibt ja schon fertige Libs für das Arduino um GPS Daten auszuwerten, aber diese möchte ich nicht benutzen. Das GPS Modul gibt folgende Zeichensätze aus, mit einstellbarer Pause:

$GPRMC,191410,A,4735.5634,N,00739.3538,E,0.0,0.0,1 81102,0.4,E,A*19
$GPRMB,A,9.99,L,,Exit,4726.8323,N,00820.4822,E,29. 212,107.2,,V,A*69
$GPGGA,191410,4735.5634,N,00739.3538,E,1,04,4.4,35 1.5,M,48.0,M,,*45
$GPGSA,A,3,,,,15,17,18,23,,,,,,4.7,4.4,1.5*3F
$GPGSV,2,1,08,02,59,282,00,03,42,287,00,06,16,094, 00,15,80,090,48*79
$GPGLL,4735.5634,N,00739.3538,E,191410,A,A*4A
$GPBOD,221.9,T,221.5,M,Exit,*6B
$GPVTG,0.0,T,359.6,M,0.0,N,0.0,K*47
$PGRME,24.7,M,23.5,M,34.1,M*1D
$PGRMZ,1012,f*36
$PGRMM,WGS 84*06
$HCHDG,170.4,,,0.4,E*03
$GPRTE,1,1,c,*37

Ich benötige aber nur diese Zeile:

$GPGGA,191410,4735.5634,N,00739.3538,E,1,04,4.4,35 1.5,M,48.0,M,,*45

In dieser Zeile befinden sich alle Daten, die ich für den Anfang benötige: Zeit (UTC), Koordinaten, Höhe und Satteliten.

Mein Problem ist es nun, dass ich mit dem Arduino nur die $GPGGA Zeile auslesen möchte. Am Anfang reicht es mir, wenn ich nur die Uhrzeit auf einem Display oder Seriell angezeigt bekomme.

Ich hoffe es kann mir jemand helfen.

Gruß
Felix

ePyx
08.03.2013, 21:42
Hätte folgenden Ansatz ohne Gewähr:

Mit strncmp auf $GPGGA suchen, die Zeichenfolge anschließend mit strtoken zerlegen und über die aktuelle Position entscheiden um welchen Wert es sich handelt. Den Wert falls nötig umrechnen und anzeigen/ausgeben.

Zwerwelfliescher
09.03.2013, 10:04
Den Befehl strncmp gibt es meines Wissens nach nicht bei Arduino. Ich kann doch auch folgendes machen, oder?



strting = String("$GPGGA");

if (string == "$GPGGA")



Gruß

ePyx
09.03.2013, 13:16
strncmp ist meines Wissens nach in string.h definiert. Die kann man auch bei der Arduino-IDE inkluden.

Zwerwelfliescher
09.03.2013, 16:55
Hallo,

stimmt, der Befehl ist in der string.h. Leider habe ich keine Ahnung wie ich diesen Befehl nutzen soll. Gibt es irgendwo ein Beispiel?

Gruß

Gerd_Loewe
10.03.2013, 11:28
Hallo,

nur ein kurzer Zwischenruf (bin gleich wieder vom PC weg):
Du schreibst, "Das GPS Modul gibt folgende Zeichensätze aus, mit einstellbarer Pause". Also gehe ich mal davon aus, dass Du die zugehörige Setup-Software für's GPS-Modul verwenden kannst. Damit kannst Du dem Modul auch beibringen, dass es Dir nur Deine gewünschten $GPGGA-Daten liefert. Mein Modul habe ich vor Längerem so eingestellt, dass es nur 1x pro Sekunde die $GPRMC-Daten ausgibt. Schau mal in die Doku.

Gruß Gerd

Zwerwelfliescher
10.03.2013, 11:33
Hallo,

nur ein kurzer Zwischenruf (bin gleich wieder vom PC weg):
Du schreibst, "Das GPS Modul gibt folgende Zeichensätze aus, mit einstellbarer Pause". Also gehe ich mal davon aus, dass Du die zugehörige Setup-Software für's GPS-Modul verwenden kannst. Damit kannst Du dem Modul auch beibringen, dass es Dir nur Deine gewünschten $GPGGA-Daten liefert. Mein Modul habe ich vor Längerem so eingestellt, dass es nur 1x pro Sekunde die $GPRMC-Daten ausgibt. Schau mal in die Doku.

Gruß Gerd

Danke für den Tipp. Werde ich leich mal nachschauen.

Gruß
Felix

ePyx
10.03.2013, 19:11
Bzgl. strncmp und strtok ein klein wenig Lektüre mit Beispielen :

strncmp (http://www.cplusplus.com/reference/cstring/strncmp/) und für strtok (http://www.cplusplus.com/reference/cstring/strtok/)

Eventuell hilft dir das ja weiter. Zum testen kann man das Ganze ja auch zuvor mit einer statischen Sequenz und einem kleinen C-Prog auf dem Rechner implementieren und Testen. Dann musst du nicht ständig flashen und das Debuggen ist auf dem PC oftmals leichter als auf dem AVR.