Avatar billede akki Nybegynder
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&#8224; sk&#8216;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");
      }
*/


}
Avatar billede arne_v Ekspert
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.
Avatar billede arne_v Ekspert
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));
Avatar billede akki Nybegynder
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...
Avatar billede akki Nybegynder
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...
Avatar billede arne_v Ekspert
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&#8224; sk&#8216;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);
}
Avatar billede arne_v Ekspert
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.
Avatar billede akki Nybegynder
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...
Avatar billede arne_v Ekspert
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&#8224; sk&#8216;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);
}
Avatar billede mcgoat Nybegynder
13. august 2003 - 12:25 #9
Hehe... har selv lavet den opgave... *gg* hvem har du som lærer(på TEC ballerup?)
Avatar billede akki Nybegynder
13. august 2003 - 12:26 #10
skriver denne stadig uret i toppen??
Avatar billede akki Nybegynder
13. august 2003 - 12:28 #11
til mcgoat

jeg har jens..

hvem havde du... og har du evt stadig opgaven.???
Avatar billede arne_v Ekspert
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.
Avatar billede arne_v Ekspert
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);
Avatar billede mcgoat Nybegynder
13. august 2003 - 12:31 #14
Yep har opgaven... Jeg havde Bjørn :o( Vær glad for du har Jens
Avatar billede akki Nybegynder
13. august 2003 - 12:31 #15
ok.. date skulle meget gerne også stå og kører automatisk.. den tikker selv sekunder...
Avatar billede akki Nybegynder
13. august 2003 - 12:32 #16
til mcgoat.. har du den så du evt, kan emaile den til mig....?? ville blive monster glad....
Avatar billede mcgoat Nybegynder
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.
Avatar billede akki Nybegynder
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..
Avatar billede arne_v Ekspert
13. august 2003 - 12:35 #19
Min kod eopdaterer kun hver gang der kommer nye data.

Virker logisk på mig.
Avatar billede arne_v Ekspert
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]
Avatar billede akki Nybegynder
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.
Avatar billede mcgoat Nybegynder
13. august 2003 - 12:44 #22
arne_v, de har en lærer de kan spørge, måske det var bedre... ?
Avatar billede akki Nybegynder
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..
Avatar billede akki Nybegynder
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...
Avatar billede mcgoat Nybegynder
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
Avatar billede akki Nybegynder
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....
Avatar billede mcgoat Nybegynder
13. august 2003 - 12:58 #27
brug sleep() funktionen
Avatar billede akki Nybegynder
13. august 2003 - 13:00 #28
hvordan skal jeg bruge den uden at sætte hele programmet i sleep
Avatar billede segmose Nybegynder
13. august 2003 - 13:04 #29
Det kan du ikke.
Avatar billede mcgoat Nybegynder
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
Avatar billede segmose Nybegynder
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?
Avatar billede akki Nybegynder
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
Avatar billede arne_v Ekspert
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;
  }
  ...
}
Avatar billede akki Nybegynder
13. august 2003 - 13:25 #34
hvad skal der være i stedet for ....

kan ikke lige helt forstå koden...
Avatar billede arne_v Ekspert
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.
Avatar billede mcgoat Nybegynder
15. august 2003 - 14:53 #36
kan du ikke lukke dine spørgsmål... du har 1400 point ude....
Avatar billede arne_v Ekspert
10. september 2003 - 22:17 #37
Helt sikkert lukke tid !
Avatar billede arne_v Ekspert
10. september 2003 - 22:18 #38
Og et svar hvis du kunne bruge nogle af mine kommentarer.
Avatar billede akki Nybegynder
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
Avatar billede coolby Nybegynder
17. september 2003 - 14:00 #40
det der ser bekendt ud er også i kan med det projekt med vejrstation
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester