13. august 2003 - 12:00
Der er
39 kommentarer og 1 løsning
hjælp til display af data
jeg sider og knokler med et lille projekt, hvor jeg for en streng fra min com port. Jeg mangler nu lidt hjælp til at få dem displayet, sådan at de løbene bliver opdateret. ikke nok med det, skal jeg ogsåm meget gerne kunne gemme det hele i en fil, som hedder yyyymmdd.txt. min foreløbige kode ser sådan ud. den bliver skrevet i det gode gamle Cpp fra borland, den som kører i dos mode. håber at nogen kan hjælpe. #include <bios.h> #include <iostream.h> #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <fcntl.h> #include <io.h> #include <dos.h> #define COM1 0 #define DATA_READY 0x100 #define TRUE 1 #define FALSE 0 #define SETTINGS (_COM_9600 | _COM_CHR8 | _COM_STOP1 | _COM_NOPARITY) char tekst[81]; char operato,cha; char tal1t[81],tal2t[81],tal3t[81],tal4t[81]; float tal1,tal2,tal3; unsigned in,out, status; char outstr[81]; int stop=0; int com_stat; int handle; void com() { // com_stat=0; status = _bios_serialcom(_COM_STATUS, COM1, 0); if (status & DATA_READY) if ((out = _bios_serialcom(_COM_RECEIVE, COM1, 0) & 0x7F) != 0) { cha=out; com_stat=1; // outstr[0]=out; // strcat(tekst,outstr); } if (kbhit()) { if ((in = getch()) == '\x1B') { stop=1; } _bios_serialcom(_COM_SEND, COM1, in); } } void date(void) { struct time t; textcolor(WHITE); _setcursortype(_NOCURSOR); struct date d; getdate(&d); gotoxy(1,1); cprintf("%04d-%02d-%02d",d.da_year,d.da_mon,d.da_day); gotoxy(13,1); gettime(&t); cprintf("%02d:%02d:%02d\n",t.ti_hour,t.ti_min,t.ti_sec); } void skilad(void) { int x,y,z,i; clrscr(); _bios_serialcom(_COM_INIT, COM1, SETTINGS); tekst[0]='\0'; com_stat=0; cha=0; while(stop!=1) { do { while(com_stat==0) com(); com_stat=0; } while(cha!='#'); y=0; do { while(com_stat==0) com(); tal1t[y]=cha; tal1t[y+1]='\0'; y=y+1; com_stat=0; // printf("tal1t: %c\n",cha); } while(cha!=','); y=0; do { while(com_stat==0) com(); tal2t[y]=cha; tal2t[y+1]='\0'; y=y+1; com_stat=0; // printf("tal2t: %c\n",cha); } while(cha!=','); y=0; do { while(com_stat==0) com(); tal3t[y]=cha; tal3t[y+1]='\0'; y=y+1; com_stat=0; } while(cha!='@'); } } void main(void) { int i; clrscr(); date(); //skriver vores dato skilad(); //skiller vores data fra kittet ud i tal1t, tal2t, tal3t int exit=0; //tegner en top og en bund streg for(i = 1; i<80; i++) { gotoxy(i,2); putchar('Í'); } for(i = 1; i<80; i++) { gotoxy(i,22); putchar('Í'); } //skriver vores VH, VR,samt Lufttryk p† sk‘rmen. while(exit!=1) { printf("\n"); gotoxy(5,5); printf("Vindhastighed: %s m/s",tal1t); gotoxy(5,7); printf("Lufttryk: %s hPa",tal2t); gotoxy(5,9); printf("Vindretning: %s ",tal3t); if (kbhit()) { if ((in = getch()) == '\x1B') { exit=1; } } } /* if(tal1t<10) { gotoxy(5,11); printf("alarm 10"); } */ }
Annonceindlæg fra Arctic Wolf
13. august 2003 - 12:10
#1
Jeg tror ikke at jeg har forstået problemet. Løbende opdatering er vel et spørgsmål om en løkke. Og så vidt jeg kan se udfra din kode skal du bar ehav eflyttet noget mere ind i while løkken i main.
13. august 2003 - 12:12
#2
Og at skrive til en fil er jo simpelt. Du kan konstruere filnavnet med: char fnm[33]; time_t t; t=time(NULL); strftime(fnm,sizeof(fnm),"%Y%m%d.TXT",localtime(&t));
13. august 2003 - 12:14
#3
ja.. du har forstået det.. men jeg har lidt problemer med at få det til at virke.. derfor prøver jeg her på eks. har kun haft c i to uger så jeg er ikke en haj.. men håber at der sider en her inde som kan hjælpe mig.. Jeg skal havde det displayet flot på skærmen, samt gemt det i en fil, på en måde så jeg kan hente det ud let igen. kan nogen hjælpe med det...
13. august 2003 - 12:15
#4
det med filnavnet har jeg fået lidt hjælp til herinde fra.. mangler bare at få sat det hele sammen, sådan at det kan virke...
13. august 2003 - 12:20
#5
Filen er nok det nemmeste. Følgende bør virke: void main(void) { int i; char fnm[33]; time_t t; FILE *fp; t=time(NULL); strftime(fnm,sizeof(fnm),"%Y%m%d.TXT",localtime(&t)); fp = fopen(fnm,"w"); clrscr(); date(); //skriver vores dato skilad(); //skiller vores data fra kittet ud i tal1t, tal2t, tal3t int exit=0; //tegner en top og en bund streg for(i = 1; i<80; i++) { gotoxy(i,2); putchar('Í'); } for(i = 1; i<80; i++) { gotoxy(i,22); putchar('Í'); } //skriver vores VH, VR,samt Lufttryk p† sk‘rmen. while(exit!=1) { printf("\n"); gotoxy(5,5); printf("Vindhastighed: %s m/s",tal1t); gotoxy(5,7); printf("Lufttryk: %s hPa",tal2t); gotoxy(5,9); printf("Vindretning: %s ",tal3t); fprintf(fp,"%d %d %d\n",tal1t,tal2t,tal3t); if (kbhit()) { if ((in = getch()) == '\x1B') { exit=1; } } } /* if(tal1t<10) { gotoxy(5,11); printf("alarm 10"); } */ fclose(fp); }
13. august 2003 - 12:21
#6
Jeg er da iøvrigt imponeret over at du er gået igang med en så krævende opgave med kun 2 ugers erfaring.
13. august 2003 - 12:23
#7
Jeg sider på skole lige nu.. er igang med at uddanne mig som datafagtekniker.. og det er vores opgave.. efter kun at havde haft c i 10 dage... jeg er lidt blank til det.. derfor spørg jeg om hjælp...
13. august 2003 - 12:23
#8
Med hensyn til løkke så kunne du jo prøve noget a la: void main(void) { int i; char fnm[33]; time_t t; FILE *fp; t=time(NULL); strftime(fnm,sizeof(fnm),"%Y%m%d.TXT",localtime(&t)); fp = fopen(fnm,"w"); int exit=0; clrscr(); //tegner en top og en bund streg for(i = 1; i<80; i++) { gotoxy(i,2); putchar('Í'); } for(i = 1; i<80; i++) { gotoxy(i,22); putchar('Í'); } //skriver vores VH, VR,samt Lufttryk p† sk‘rmen. while(exit!=1) { date(); //skriver vores dato skilad(); //skiller vores data fra kittet ud i tal1t, tal2t, tal3t printf("\n"); gotoxy(5,5); printf("Vindhastighed: %s m/s",tal1t); gotoxy(5,7); printf("Lufttryk: %s hPa",tal2t); gotoxy(5,9); printf("Vindretning: %s ",tal3t); fprintf(fp,"%d %d %d\n",tal1t,tal2t,tal3t); if (kbhit()) { if ((in = getch()) == '\x1B') { exit=1; } } } /* if(tal1t<10) { gotoxy(5,11); printf("alarm 10"); } */ fclose(fp); }
13. august 2003 - 12:25
#9
Hehe... har selv lavet den opgave... *gg* hvem har du som lærer(på TEC ballerup?)
13. august 2003 - 12:26
#10
skriver denne stadig uret i toppen??
13. august 2003 - 12:28
#11
til mcgoat jeg har jens.. hvem havde du... og har du evt stadig opgaven.???
13. august 2003 - 12:30
#12
Nu har jeg ikk ekørt den. Jeg har ikke den hardware dims. Mne jeg har kun flyttet date og skilad ned i loopen, så tid og tal skulle blive opdateret.
13. august 2003 - 12:30
#13
Nu kan jeg iøvrigt se at tal ikke er tal d.v.s. at: fprintf(fp,"%d %d %d\n",tal1t,tal2t,tal3t); skal være: fprintf(fp,"%s %s %s\n",tal1t,tal2t,tal3t);
13. august 2003 - 12:31
#14
Yep har opgaven... Jeg havde Bjørn :o( Vær glad for du har Jens
13. august 2003 - 12:31
#15
ok.. date skulle meget gerne også stå og kører automatisk.. den tikker selv sekunder...
13. august 2003 - 12:32
#16
til mcgoat.. har du den så du evt, kan emaile den til mig....?? ville blive monster glad....
13. august 2003 - 12:33
#17
Har den kun på papir :o( meeen, det er jo også lidt federe at lave den selv... hvis du skal have hjælp kan du jo bare spørge jens.
13. august 2003 - 12:33
#18
til arne_v hvis vi også vil havde vores program til at skrive vores vindhastighed i kmh feks, og knop.. hvordan kan man så det, når tallet står i en streng.. vi har prøvet med x=tal1t/100; men virker ikke..
13. august 2003 - 12:35
#19
Min kod eopdaterer kun hver gang der kommer nye data. Virker logisk på mig.
13. august 2003 - 12:36
#20
Du kan konvertere fra tekst til tal med: int tal1 = atoi(tal1t); eller double tal1 = atof(tal1t); [afhængig af om det er heltal elle rdecimal tal]
13. august 2003 - 12:38
#21
jeg har lige testet det du skrev før.. den viser kun noget på displayet når vi har trykket esc. dvs den viser det ikke løbene.
13. august 2003 - 12:44
#22
arne_v, de har en lærer de kan spørge, måske det var bedre... ?
13. august 2003 - 12:51
#23
han vil ikke hjælpe... idet at vi er noget så langt.. det der sker.. det er at, når vi starter programmet. så viser den bare sort skærm. første gang vi trykker på esc, så viser den fint displaet, dog uden ur, men den opdatere ikke felterne, og når vi så trykker esc igen så afslutter programmet. den gemmer forresten heller ikke filen..hvilket jeg heller ikke kan forstå.. det ser nemlig ud som om at den skulle gøre det..
13. august 2003 - 12:54
#24
fand lidt fejl i min egen kode... programmet, viser nu først noget på skærmen, når man afslutter.. men den gemmer til gengæld filen...
13. august 2003 - 12:55
#25
Selvfølgelig vil han da hjælpe, det er det han er der til... og jeg kender jens, han plejer da at være meget hjælpsom
13. august 2003 - 12:55
#26
lige en ting til... er det ikke muligt, for ikke at løbe tør for disk´plads... at sætte filen til kun at gemme hvet 10 eller 30 sek.. lige nu fylder den jeg ved ikke hvor mange kb op i løbet af 2 sek....
13. august 2003 - 12:58
#27
brug sleep() funktionen
13. august 2003 - 13:00
#28
hvordan skal jeg bruge den uden at sætte hele programmet i sleep
13. august 2003 - 13:04
#29
Det kan du ikke.
13. august 2003 - 13:05
#30
jo man kan, gjorde jeg da i mit projekt... Bare sleep i f.eks 1 sek mellem hver gang den skriver til skærmen, og når den så har gjort det 60 gange er der gået et minut
13. august 2003 - 13:10
#31
> akki Du kunne begrændse dig til kun at skrive i filen når data rent faktisk ændre sig, hvilket ikke burde være så tit igen. > mcgoat får du så ikke problemer hvis der kommer mere data til comporten end du læser?
13. august 2003 - 13:13
#32
hvordan ville du sætte den til kun at ændre sig når data ændres... vores kit som vi skal programmer til, sender hele tiden karektere afsted på følgene måde #xxx,xxxx,xxx@ hvor # og @ er start og slut bit
13. august 2003 - 13:20
#33
En nem måde var at gemme tiden for sidste skriv og så kun skrive hvis der er gået mere end 5 sekunder. Noget ligesom: time_t t,tlast=0; ... while(1) { ... t = time(NULL); if(t-tlast >= 5) { // skriv tlast = t; } ... }
13. august 2003 - 13:25
#34
hvad skal der være i stedet for .... kan ikke lige helt forstå koden...
13. august 2003 - 13:28
#35
... er bare resten af koden. Jeg har kun vist den kode som er relevant for kun at skrive hver 5. sekund.
15. august 2003 - 14:53
#36
kan du ikke lukke dine spørgsmål... du har 1400 point ude....
10. september 2003 - 22:17
#37
Helt sikkert lukke tid !
10. september 2003 - 22:18
#38
Og et svar hvis du kunne bruge nogle af mine kommentarer.
11. september 2003 - 09:08
#39
ved godt at jeg har en masse point ude.. men mange af mine ?? kan jeg ikke lukke... ved ikke hvorfor
17. september 2003 - 14:00
#40
det der ser bekendt ud er også i kan med det projekt med vejrstation
Kurser inden for grundlæggende programmering