Re: große Datenmengen über Ser.Schnittst. auslesen Kategorie: Programmierung (von wernerAZ - 21.04.2007 17:09) | ||
Als Antwort auf Re: große Datenmengen über Ser.Schnittst. auslesen von André H. - 21.04.2007 15:34 | ||
| ||
Danke für deine Hilfe Andre' , aber mittlerweile läut das Einlesen sehr gut. Werde mir aber deinen Souce genauer ansehen, sieht interessant aus. Mein Problem jetzt: Die Daten in einem Thread einlesen und aktualisieren und im main Werte anzeigen und berechnen. //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; } function auswertung(gpsData gps,byte buf[]) { string s14[14]; int zaehler,pos; pos=0; 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]); Werte werden nicht immer gelöscht 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]; } } function auslesen(gpsData gps,byte buf[]) { byte buffer[1024]; byte c; hwcom.setbuf(buffer,1024); loop { wait hwcom.ready(); c=hwcom.get(); if c=='*' { hwcom.receive(buf,127,500); hwcom.send(buf,127); auswertung(gps,buf); //zeigeData(gps); hwcom.flush(); } } } thread com { gpsData gps; byte buf[255]; auslesen(gps,buf); menu.location[1].breite=gps.breite; menu.location[1].breiteB=gps.breiteB; menu.location[1].laenge=gps.laenge; menu.location[1].laengeL=gps.laengeL; } Hier das Hauptprogramm 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); run v24.com; loop { touchlcd.textmodus(1,1); touchlcd.touchactive(1); touchlcd.touchevent(0,0); //kein invers, kein Beep i0=menu.anzeigen(i0); //letzter Datensatz auswählen } } Und hier ein Teil von menu: //Modul menu type gpsDaten { string breiteB; string breite; string laengeL; string laenge; string datum; string name; } string s,hs; int i,a,uhr; float posBreite,posLaenge,zielBreite,zielLaenge,entfernung; gpsDaten location[15]; function anzeigen(int i3) returns int { loop { lcdext.clear(); lcdext.print2(location[i3].name); lcdext.line(2); lcdext.print("Koordinaten"); touchlcd.clear(); lcdext.clear(); anzeige.kreis(); //Entfernung anzeigen touchlcd.font(3,1,1); s=location[1].breite; posBreite=berechnung.inStunden(s); s=location[1].laenge; posLaenge=berechnung.inStunden(s); s=location[i3].breite; zielBreite=berechnung.inStunden(s); s=location[i3].laenge; zielLaenge=berechnung.inStunden(s); entfernung=berechnung.entfernung(posBreite,posLaenge, zielBreite,zielLaenge); str.clear(s); str.putfloatf(s,entfernung,4); touchlcd.text2('L',15,29,s); uhr=berechnung.grobeRichtung(posBreite,posLaenge, zielBreite,zielLaenge); anzeige.kompass(0); if uhr!=360 anzeige.zeiger(uhr); touchlcd.font(2,1,1); //s="ZIEL"; //touchlcd.text2('L',94,0,s); touchlcd.text2('R',127,0,location[i3].name); touchlcd.font(1,1,1); touchlcd.text2('L',78,7,location[i3].breiteB); touchlcd.text2('L',86,7,location[i3].breite); touchlcd.text2('L',78,14,location[i3].laengeL); touchlcd.text2('L',82,14,location[i3].laenge); s="POS."; touchlcd.text2('L',94,44,s); touchlcd.text2('L',78,51,location[1].breiteB); touchlcd.text2('L',86,51,location[1].breite); touchlcd.text2('L',78,58,location[1].laengeL); touchlcd.text2('L',82,58,location[1].laenge); s="DATENBANK"; touchlcd.text2('L',80,30,s); s=""; touchlcd.button(0,7,7,'*',0,s,str.length(s)); s=""; touchlcd.button(0,4,5,'+',0,s,str.length(s)); s="DATENBANK"; touchlcd.button(0,9,10,'#',2,s,str.length(s)); s=""; touchlcd.button(0,14,15,'-',0,s,str.length(s)); while(!swcom.rxd()); a=swcom.get(); if a=='+' { return edit(i3); } if a=='-' { return anzeigen(1); } if a=='#' { lcdext.clear(); lcdext.print("Datenbank"); return auswahl(i3); } if a=='*' { lcdext.clear(); lcdext.print("Entfernung"); } } } Was ich nicht verstehe, im thread v24.com die Zeile: menu.location[1].breite=gps.breite; Hier wollte ich eigentlich die aktuellen Koortinaten(z.B. gps.breite) in menu.location[1].breite kopieren. Die aktuellen Werte würden dann im Hauptprogramm angezeigt werden. Geht aber nicht. Was mache ich falsch? Gru� Werner | ||
Antwort schreiben Antworten: |