Re: große Datenmengen über Ser.Schnittst. auslesen Kategorie: Programmierung (von wernerAZ - 19.04.2007 16:04) | ||
Als Antwort auf große Datenmengen über Ser.Schnittst. auslesen von wernerAZ - 16.04.2007 22:09 | ||
| ||
Also das einlesen habe ich jetzt gelöst. Ich hatte Probleme mit dem Terminalprogramm. Anbei auch meine Lösung. Aber wie bekomme ich v24.auslesen und v24.auswertung in einen Thread? Und vor allem, wie mache ich das mit der �bergabe von buf[] und type gps? //serielle Schnittstelle einlesen und auswerten //GPS-Signal mit Modul v24 auswerten //alphanum. Eingabe mit �bernahme //mit Modul menu //grobe Richtung anzeigen //Entfernung anzeigen //Koordinate in Stunden umrechnen //mit Himmelsrichtung //gps - Programmaufteilung //gps10 - Daten in Flash-Segment //gps9 - mit Zeiger //gps8 - Weitere Anzeigen //gps7 - Anzeige Kompass //gps6 - Anzeige Uhr //gps5 - 3. Ebene im Menü (Eingabe) //gps4 - 2. Ebene im Menü (Edit) //gps3 - Auswahl im Menü //gps2 - Menü für Datenbank //gps1 - Datenbank vor und zurück blättern string s,hs,s3; float e; byte buf[255]; //hier gehts los thread main { v24.gpsData gps0; int i0,anzahlDaten; anzeige.gradMemory=360; anzeige.zeigerMemory=0; anzahlDaten=menu.datenbank(); //Anzahl Datensätze auslesen //Programm initialisieren lcdext.init(); touchlcd.init(); touchlcd.cursor(0); i0=anzahlDaten-1; hwcom.init(); hwcom.setspeed(hwcom.SPEED_4800); //v24.initData(gps0); //v24.zeigeData(gps0); //sleep(3000); //v24.testBuffer(gps0,buf); //v24.auswertung(gps0,buf); //v24.zeigeData(gps0); v24.auslesen(gps0,buf); //while(-1); loop { touchlcd.textmodus(1,1); touchlcd.touchactive(1); touchlcd.touchevent(0,0); //kein invers, kein Beep i0=menu.anzeigen(i0); //letzter Datensatz auswählen } } //Serielle Schnittstelle einlesen //Modul v24, GPS-Signal formatiert 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; function initData(gpsData gps) { //gpsData definieren gps.kennung="dgs,fgd,fgd$fds,k$GPRMC"; gps.zeit="135155.000"; gps.status="A"; gps.breite="4959.3687"; gps.breiteB="N"; gps.laenge="00813.8943"; gps.laengeL="E"; gps.speed="0.00"; gps.grad="258.97"; gps.datum="220307"; gps.gradM=""; gps.direction=""; gps.mode="A"; gps.checksum="*6c"; } function zeigeData(gpsData gps) { touchlcd.clear(); touchlcd.textmodus(1,1); touchlcd.font(3,1,1); touchlcd.text2('L',1,0,gps.kennung); touchlcd.text2('L',1,8,gps.zeit); touchlcd.text2('L',1,16,gps.breiteB); touchlcd.text2('L',8,16,gps.breite); touchlcd.text2('L',1,24,gps.laengeL); touchlcd.text2('L',8,24,gps.laenge); touchlcd.text2('L',1,32,gps.speed); touchlcd.text2('L',1,40,gps.grad); touchlcd.text2('L',1,48,gps.datum); } //in das Byte-Array buf[255] wird ein GPS-Signal kopiert function testBuffer(gpsData gps,byte buf[]) { string k; int l1,l2; k=","; l2=0; l1=str.length(gps.kennung); mem.copy(buf,0,gps.kennung,l1); l2=l2+l1; mem.copy(buf,l2,k,1); l2=l2+1; l1=str.length(gps.zeit); mem.copy(buf,l2,gps.zeit,l1); l2=l2+l1; mem.copy(buf,l2,k,1); l2=l2+1; l1=str.length(gps.status); mem.copy(buf,l2,gps.status,l1); l2=l2+l1; mem.copy(buf,l2,k,1); l2=l2+1; l1=str.length(gps.breite); mem.copy(buf,l2,gps.breite,l1); l2=l2+l1; mem.copy(buf,l2,k,1); l2=l2+1; l1=str.length(gps.breiteB); mem.copy(buf,l2,gps.breiteB,l1); l2=l2+l1; mem.copy(buf,l2,k,1); l2=l2+1; l1=str.length(gps.laenge); mem.copy(buf,l2,gps.laenge,l1); l2=l2+l1; mem.copy(buf,l2,k,1); l2=l2+1; l1=str.length(gps.laengeL); mem.copy(buf,l2,gps.laengeL,l1); l2=l2+l1; mem.copy(buf,l2,k,1); l2=l2+1; l1=str.length(gps.speed); mem.copy(buf,l2,gps.speed,l1); l2=l2+l1; mem.copy(buf,l2,k,1); l2=l2+1; l1=str.length(gps.grad); mem.copy(buf,l2,gps.grad,l1); l2=l2+l1; mem.copy(buf,l2,k,1); l2=l2+1; l1=str.length(gps.datum); mem.copy(buf,l2,gps.datum,l1); l2=l2+l1; mem.copy(buf,l2,k,1); l2=l2+1; k=",,A,*6c"; l1=str.length(k); mem.copy(buf,l2,k,l1); l2=l2+l1; buf[l2]=12; //in Buf steht dann 13,??? buf[l2+1]=9; //in buf steht dann 10,??? k=""; //Wird einfach im Display angezeigt,??? } function auswertung(gpsData gps,byte buf[]) { string s14[14]; int zaehler,pos; pos=0; //strx.split(buf,s14,','); geht leider nicht for zaehler=0 ... 127 { if buf[zaehler]=='*' & pos==13 break; //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]; if str.length(s14[1])==10 //Gültigkeit prüfen gps.zeit=s14[1]; //und zuweisen gps.status=s14[2]; if str.length(s14[3])==9 gps.breite=s14[3]; if str.length(s14[4])==1 gps.breiteB=s14[4]; if str.length(s14[5])==10 gps.laenge=s14[5]; if str.length(s14[6])==1 gps.laengeL=s14[6]; if str.length(s14[7])>3 gps.speed=s14[7]; if str.length(s14[8])>3 gps.grad=s14[8]; if str.length(s14[9])==6 gps.datum=s14[9]; //zeigeData(gps.gpsData gps); } } function auslesen(gpsData gps,byte buf[]) { byte buffer[1024]; byte c; hwcom.setbuf(buffer,1024); loop { //wait hwcom.rxd(); wait hwcom.ready(); c=hwcom.get(); if c=='*' { hwcom.receive(buf,127,500); //hwcom.send(buf,127); auswertung(gps,buf); zeigeData(gps); hwcom.flush(); } } } Bitte helt mir, ich würde zugern mein GPS am Wochenende mit dem schönen Wetter ausprobieren. Gru� Werner | ||
Antwort schreiben Antworten: |