Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo Werner, > > > > Hier meine Auswertung: > > <code> > > function auswertung(gpsData gps,byte buf[]) > > { > > string s14[14]; > > int zaehler,pos; > > pos=0; > > //strx.split(buf,s14,','); geht leider nicht > </code> > Das kannn auch nicht gehen, da str.split() Strings als Parameter erwartet. > Bytearrays sind aber keine Strings (obwohl Strings ein Art von Bytearray sind). > > <code>> 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! > </code> > Definiere bitte "geht nicht richtig". > Bei mir geht's. > > Allerdings kannst Du Stringarrays sehr viel einfacher (und schneller) löschen: > <code> > mem.fill(s14, 14*32, 0); //Array als Referenz, 14 x 32 Byte, ASCII 0 > > > > 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); > > } > > } > > </code> > > Leider bekomme ich das Einlesen nicht auf die Reihe. > > <code> > > 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(); </code> > > Ich glaube, Du kennst den sinn von hwcom.ready() nicht. > Mit ready kann man prüfen, ob die Schnittstelle "frei" ist. > Sprich, gerade keine Ausgaben stattfinden. > Bei Empfang von Daten macht es überhauptkeinen Sinn, auf Sendebereitschaft zu warten. > Du willst ja erst Empfangen. > Auch vor dem Aufruf von hwcom.send() macht es keinen Sinn, da das Warten > auf Sendebereitschaft bereits in hwcom.send() stattfindet. > Lediglich nach Aufruf der Sendefunktion kann es Sinn machen zu warten, > da der Sendevorgang meistens noch nicht abgeschlossen ist, nachdem hwcom.send() > aufgerufen wurde. > Beginnt man danach zu schnell auf das zu sendende Array schreibend zuzugreifen, > können die Daten etwas durcheinanderkommen. > > Außerdem mußt Du mir bitte kurz erklären, worin hier der Sinn liegt: > <code> buf[0]=hwcom.receive(buf,6,12000);</code> > Du speicherst im ersten Element von buf[] die Anzahl der empfangenen Bytes. > Allerdings ist buf[] auch das Array, in dem Du die Daten speicherst. > Somit überschreibst Du jedesmal das erste empfangene Byte mit der Anzahl > der empfangenen Bytes. > Das kann nicht gut gehen. > > > 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? > > Zuerst: Definiere Bytearrays immer mit einer geradzahligen Anzahl an Elementen. > > Versuch's mal mit folgenden Routinen. > Ich habe die gerade schnell zusammengestrickt. > Wegen nicht vorhandenem GPS-Empfänger kann ich diese aber nicht testen. > <code> > function setStrlen(byte gpsstring[], byte len) > { > mem.fillpos(gpsstring, len, 31-len, 0);// ungenutzte Bytes ggf. auf 0 setzen > gpsstring[31]=len; > } > > function getGPRMC(gpsData gps) returns int > {byte buf[250], len, start, end, pos, poslen; > string ID; > len=hwcom.receive(buf, 250, 500); //250Byte empfangen > > ID="$GPRMC"; > start=strx.InStr(0, buf, ID, len, 6); // Nach "$GPRMC" suchen > if start==-1 return 0;// Zeichenfolge wurde nicht gefunden > > ID="\13\10"; // Nach abschließendem CRLF suchen: > end =strx.InStr(start, buf, ID, len-start, 2); > if end==-1 return 0;// Zeichenfolge wurde nicht gefunden > gps.kennung="GPRMC"; // Ist hier immer gleich > > ID=","; > > //gps.zeit > pos=strx.InStr(start, buf, ID, end-start, 1) + 1; > poslen=strx.InStr(pos, buf, ID, end-pos,1); > mem.copypos(gps.zeit, 0, buf, pos, poslen-pos); > setStrlen(gps.zeit, poslen-pos); > //gps.status > pos=poslen+1; > poslen=strx.InStr(pos, buf, ID, end-pos,1); > mem.copypos(gps.status, 0, buf, pos, poslen-pos); > setStrlen(gps.status, poslen-pos); > //gps.breite > pos=poslen+1; > poslen=strx.InStr(pos, buf, ID, end-pos,1); > mem.copypos(gps.breite, 0, buf, pos, poslen-pos); > setStrlen(gps.breite, poslen-pos); > //gps.breiteB > pos=poslen+1; > poslen=strx.InStr(pos, buf, ID, end-pos,1); > mem.copypos(gps.breiteB, 0, buf, pos, poslen-pos); > setStrlen(gps.breiteB, poslen-pos); > //gps.laenge > pos=poslen+1; > poslen=strx.InStr(pos, buf, ID, end-pos,1); > mem.copypos(gps.laenge, 0, buf, pos, poslen-pos); > setStrlen(gps.laenge, poslen-pos); > //gps.laengeL > pos=poslen+1; > poslen=strx.InStr(pos, buf, ID, end-pos,1); > mem.copypos(gps.laengeL, 0, buf, pos, poslen-pos); > setStrlen(gps.laengeL, poslen-pos); > //gps.speed > pos=poslen+1; > poslen=strx.InStr(pos, buf, ID, end-pos,1); > mem.copypos(gps.speed, 0, buf, pos, poslen-pos); > setStrlen(gps.speed, poslen-pos); > //gps.grad > pos=poslen+1; > poslen=strx.InStr(pos, buf, ID, end-pos,1); > mem.copypos(gps.grad, 0, buf, pos, poslen-pos); > setStrlen(gps.grad, poslen-pos); > //gps.datum > pos=poslen+1; > poslen=strx.InStr(pos, buf, ID, end-pos,1); > mem.copypos(gps.datum, 0, buf, pos, poslen-pos); > setStrlen(gps.datum, poslen-pos); > //gps.gradM > pos=poslen+1; > poslen=strx.InStr(pos, buf, ID, end-pos,1); > mem.copypos(gps.gradM, 0, buf, pos, poslen-pos); > setStrlen(gps.gradM, poslen-pos); > //gps.direction > pos=poslen+1; > poslen=strx.InStr(pos, buf, ID, end-pos,1); > mem.copypos(gps.direction, 0, buf, pos, poslen-pos); > setStrlen(gps.direction, poslen-pos); > //gps.mode > ID="*"; > pos=poslen+1; > poslen=strx.InStr(pos, buf, ID, end-pos,1); > mem.copypos(gps.mode, 0, buf, pos, poslen-pos); > setStrlen(gps.mode, poslen-pos); > //gps.checksum > pos=poslen+1; > mem.copypos(gps.checksum, 0, buf, pos, end-pos); > setStrlen(gps.checksum, end-pos); > > return -1; > } > </code> > > > MfG André H.