Ich hab den Code irgendwo im Internet gefunden und angepasst. Es wird einmal auf ein "$" gewartet, erst wenn das empfangen wird, wird der Header und dann die einzelnen Daten ausgelesen. Dabei wird im Getgps immer bis zu einem bestimmten Symbol ein String zusammengebaut, zB sind die meisten Daten zwischen "," zu finden. Teilweise Suche ich mir auch nur die Vor- oder Nachkommastellen raus weil ich den Rest nicht brauche.
Hier ein Auszug aus meinem Programm:
( GPS() muss regelmäßig, bzw wenn etwas im USART Buffer ist, aufgerufen werden)
LG!Code:/************************* #define maxline 40 char line[maxline]; // global GPS++++++++++++++++++++++++++++++++++++++*/ static inline void GPS() { char x_gps; x_gps=0; x_gps=USART_Receive(); if (x_gps=='$') { Getgps(','); //Hole den Header if(strcmp(line,"GPGGA")==0) Gps_gga(); if(strcmp(line,"GPZDA")==0) Gps_zda(); } } /***************Position/Wert vom GPS***********************/ unsigned char Getgps(unsigned char end) { unsigned char c,i; char komma, stern; komma = ','; stern = '*'; line[0]=0; i=0; c=0; do { c=USART_Receive(); if(c==stern) return 0; //Checksumme erreicht if(c==komma) return i; //Ende eines Wertes erreicht if(c!=end) //Buchstaben sammeln { line[i]=(char)c; i++;if (i>=maxline-1) {line[0]=0;} line[i]=0; //End of String updaten } }while(c!=end); return i; } void Gps_gga() //$GPGGA Meldung ----------------------------------------- { char num, hdop,empfang; char komma,stn, min; short x,y; char buffer[10]; short temp; komma = ','; x=0;y=0; satcount=0; //Anzahl benutzter Satelliten num=0; // Uhrzeit Getgps('.'); strcpy(zeit,line); zeit[4]=0;// Sekunden raus Getgps(komma); //Rest //Breitengrad Getgps('.'); // Grad und Minuten werden nicht gebraucht num=Getgps(komma); //Nachkommastellen if(num!=0) {line[4]=0;y=atoi(line);} // nur die ersten 4 Stellen Getgps(komma); // N/S ignorieren //Längengrad Getgps('.'); // Grad und Minuten werden nicht gebraucht num=Getgps(komma); //Nachkommastellen if(num!=0) {line[4]=0;x=atoi(line);} Getgps(komma); // O/W ignorieren // //0=kein Empfang, 1=GPS, 2=DGPS num=Getgps(komma); //Anzahl benutzter Satelliten num=Getgps(komma); if(num!=0) { satcount=(unsigned char)atoi(line);} //HDOP Horizontal Dilution of Position // Getgps(','); hdop=9; Getgps('.'); hdop=(char)atoi(line); }






Zitieren

Lesezeichen