große Datenmengen über Ser.Schnittst. auslesen Kategorie: Programmierung (von wernerAZ - 16.04.2007 22:09) | ||
| ||
Hallo liebes Forum, ich möchte GPS-Daten über die serielle Schnittstelle auslesen, selectieren und auswerten. Das GPS liefert ungefähr diese Datenmenge innerhalb einer Sekunde bei 4800 Baud. $GPRMC,121920.260,A,4959.3913,N,00813.9887,E,,,130706,,,A*6D $GPGGA,121921.256,4959.3862,N,00813.9450,E,1,05,1.5,138.7,M,47.9,M,,0000*5F $GPGSA,A,3,29,26,02,10,13,,,,,,,,2.3,1.5,1.8*30 $GPRMC,121921.256,A,4959.3862,N,00813.9450,E,,,130706,,,A*68 $GPGGA,121922.000,4959.3880,N,00813.9433,E,1,05,1.5,139.4,M,47.9,M,,0000*56 $GPGSA,A,3,29,26,02,10,13,,,,,,,,2.3,1.5,1.8*30 $GPGSV,3,1,11,08,81,096,09,10,68,251,27,29,33,287,34,26,23,284,32*7B $GPGSV,3,2,11,13,11,097,29,02,06,215,23,27,52,061,16,28,31,148,*7B $GPGSV,3,3,11,21,06,334,09,03,03,031,,19,00,059,*47 $GPRMC,121922.000,A,4959.3880,N,00813.9433,E,,,130706,,,A*63 $GPGGA,121923.000,4959.3894,N,00813.9440,E,1,05,1.5,143.5,M,47.9,M,,0000*5A $GPGSA,A,3,29,26,02,10,13,,,,,,,,2.3,1.5,1.8*30 $GPRMC,121923.000,A,4959.3894,N,00813.9440,E,,,130706,,,A*63 Jede Zeile beginnt mit $ und endet mit Return+Linefeed. Für mich sind die GPRMC-Zeilen wichtig. Hier meine Auswertung: function auswertung(gpsData gps,byte buf[]) { string s14[14]; int zaehler,pos; pos=0; //strx.split(buf,s14,','); geht leider nicht for zaehler=0 ... 255 { if buf[zaehler]=='*' & pos==13 zaehler=255; //Schleife verlassen else if buf[zaehler]=='$' { for pos=0 ... 13 s14[pos]=""; //str.clear(s14[pos]); geht nicht richtig! pos=0; } else if buf[zaehler]==',' pos=pos+1; else str.putchar(s14[pos],buf[zaehler]); } if strx.comp("GPRMC",s14[0]) { gps.kennung=s14[0]; gps.zeit=s14[1]; gps.status=s14[2]; gps.breite=s14[3]; gps.breiteB=s14[4]; gps.laenge=s14[5]; gps.laengeL=s14[6]; gps.speed=s14[7]; gps.grad=s14[8]; gps.datum=s14[9]; //zeigeData(gps.gpsData gps); } } Leider bekomme ich das Einlesen nicht auf die Reihe. function auslesen(gpsData gps,byte buf[]) { byte c; //hwcom.flush(); loop { wait hwcom.ready(); buf[0]=hwcom.receive(buf,6,12000); wait hwcom.ready(); hwcom.send(buf,6); wait hwcom.ready(); /* if hwcom.rxd() { c=hwcom.get(); lcdext.put(c); hwcom.put(c); wait hwcom.ready(); // if c=='*' // { // buf[0]=hwcom.receive(buf,100,2000); //hwcom.send(buf,99); //auswertung(gps,buf); //zeigeData(gps); } */ } Wie bekomme ich die Daten in den buf[255], damit mir meine Auswertung die Daten in mein type gpsData übernimmt und ich die Daten weiter Bearbeiten kann? type gpsData { string kennung; string zeit; string status; string breite; string breiteB; string laenge; string laengeL; string speed; string grad; string datum; string gradM; string direction; string mode; string checksum; } //gpsData gps; Ich bin am verzweifeln. Und wenn das Einlesen noch in einem eigenen Thread laufen würde, wäre ich äu�erst Glücklich. Vorab besten Dank für eure Antworten wernerAZ | ||
Antwort schreiben Antworten: Re: große Datenmengen über Ser.Schnittst. auslesen (von André H. - 21.04.2007 15:34) Re: große Datenmengen über Ser.Schnittst. auslesen (von wernerAZ - 21.04.2007 18:07) Re: große Datenmengen über Ser.Schnittst. auslesen (von André H. - 22.04.2007 13:57) Re: große Datenmengen über Ser.Schnittst. auslesen (von wernerAZ - 23.04.2007 21:29) Re: große Datenmengen über Ser.Schnittst. auslesen (von Mark Simon - 12.10.2010 12:14) Re: große Datenmengen über Ser.Schnittst. auslesen (von wernerAZ - 21.04.2007 17:09) Re: große Datenmengen über Ser.Schnittst. auslesen (von wernerAZ - 19.04.2007 16:04) |