Avatar billede baltazar_ Nybegynder
08. december 2002 - 23:00 Der er 9 kommentarer og
1 løsning

udskirve som bogstaver ?

Hejsa  mit consol udskriver flg output som er hentet fra buffer:

0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x1D 0x6E 0xFF
FFFFE8 0x77 0x2B 0x73 0xFFFFFFE8 0x77 0xFFFFFFCC 0xFFFFFFCA 0xFFFFFFEB 0x77 0xFF
FFFFBD 0xFFFFFF84 0xFFFFFFE8 0x77 0xFFFFFFFA 0xFFFFFFC5 0xFFFFFFEB 0x77 0xFFFFFF
90 0xFFFFFFC6 0xFFFFFFEB 0x77 0x02 0xFFFFFFC2 0xFFFFFFEB 0x77 0xFFFFFFF3 0x65 0x
FFFFFFE8 0x77 0xFFFFFFA2 0x3A 0xFFFFFFE9 0x77 0x61 0x69 0xFFFFFFE8 0x77 0xFFFFFF
87 0x6F 0xFFFFFFE8 0x77 0xFFFFFF8F 0xFFFFFFA3 0xFFFFFFE8 0x77 0xFFFFFFDF 0xFFFFF
F80 0xFFFFFFE8 0x77 0xFFFFFF94 0xFFFFFF8F 0xFFFFFFE9 0x77 0xFFFFFF92 0xFFFFFFF4
0xFFFFFFF8 0x77 0x72 0x6A 0xFFFFFFE8 0x77 0x7B 0x66


---------------------------------------------------
Jeg får dette output ved følgende kode og kunne godt tænke mig at kune læse det med det blotte øje men ved ikke hvordan jeg skal gøre det.

  if (WaitCommEvent(SerialPort, &dwEvtMask, &o))



//    Læser fra port hvis åben
read:
static char buff[8]; // vi det kun er 8 tegn du vil læse
char *p,*p2;
BYTE Byte;
DWORD dwBytesTransferred;



ReadFile
(SerialPort,                // Port handle
&Byte,                // BOF Pointer
1,                    // Læser første 25 bytes
&dwBytesTransferred,  // Pointer to number of bytes
                      // read
NULL                  // Must be NULL for Windows CE
);
                   
// To do. ============================================================

                if (dwEvtMask &EV_RXCHAR ) // Data set ready
{

char pSTART= 0x01;
char pSLUT= 0x24;
int pIGNORE= 0x00; // Hvilke tegn der ikke skal hentes fra bufferen
// Start på WHILE sætninger
while (Byte>=pSTART)
{
Sleep(1);                      // Giver pause til buffer
printf("0x%02X ", buff[i++]); // Udskriver buffer indhold
 
}

}
Avatar billede baltazar_ Nybegynder
08. december 2002 - 23:01 #1
det skal lige tilføjes at jeg læser fra en serial port
Avatar billede dilleberg Nybegynder
08. december 2002 - 23:45 #2
Hvis du vil ha' output som bogstaver, så ret udskrivningen:

    if (iscntrl(buff[i])
      printf("%c",buff[i]);
    else
      printf(".");
    i++;

Og så skal 'buff' rettes til "unsigned char".
iscntrl defineres i <ctype.h>

db
Avatar billede dilleberg Nybegynder
08. december 2002 - 23:51 #3
Oops. Mangler en parentes
    if (iscntrl(buff[i]))
Sådan går det, når man ikke bruger compileren til at checke :-)

db
Avatar billede baltazar_ Nybegynder
09. december 2002 - 16:51 #4
ok det hjalp lidt på det nu ser outputtet således ud

****************************START

.........&#9786;  &#9786;  &#8735;  .&#8597;  &#9668;&#9658;      &#9668;&#8252;    .....
.          ..&#8962;  &#9658;. .....&#8597;    ..&#8597; ... ...    ..&#8597;...        ..&#8962;    ..&#8597;    ....
....&#9658;...            ...    .    &#9786;  .....  ..  . .    &#9658;  .  &#9787;  .  .  ...&#8962;&#9786;&#9824;
              .&#9827;&#8252; &#8616;  ..... &#8252; . &#8252; .&#9824;&#8252;


                                                              &#9787;
  .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;
&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252; .&#9786;&#8252;  &#9787;&#8252;  &#9787;&#8252;&#9787;&#8252;&#9787;&#8252; &#9658;&#9787;&#8252; &#9658;&#9787;&#8252; &#8593;&#9787;
&#8252; &#8593;&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;
&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;
&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252; .&#9787;&#8252;  &#9829;&#8252;  &#9829;&#8252;&#9829;&#8252;
&#9829;&#8252; &#9658;&#9829;&#8252; &#9658;&#9829;&#8252; &#8593;&#9829;&#8252; &#8593;&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .
&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .
&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .&#9829;&#8252; .
&#9829;&#8252;  &#9830;&#8252;  &#9830;&#8252;&#9830;&#8252;&#9830;&#8252; &#9658;&#9830;&#8252; &#9658;&#9830;&#8252; &#8593;&#9830;&#8252; &#8593;&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .
&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .
&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; ..&#8252; ..&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .
&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252; .&#9830;&#8252;  &#9827;&#8252;  &#9827;&#8252;&#9827;&#8252;&#9827;&#8252; &#9658;&#9827;&#8252; &#9658;&#9827;&#8252; &#8593;&#9827;&#8252; &#8593;&#9827;&#8252; .&#9827;&#8252; .&#9827;&#8252; .&#9827;&#8252; .&#9827;&#8252; .&#9827;&#8252; .&#9827;&#8252; .&#9827;&#8252; .&#9827;&#8252; .&#9827;&#8252; .
&#9827;&#8252; .&#9827;&#8252; .&#9827;&#8252; .&#9827;&#8252; .&#9827;&#8252; .&#9827;&#8252; .&#9827;&#8252; .&#9827;&#8252; .&#9827;&#8252; .&#9827;&#8252; .&#9827;&#8252; .&#9827;&#8252; .&#9827;&#8252;&#9824;&#8252;    .&#9824;&#8252;          .&#8252;  .&#9788;
.&#9827;&#8252;            .&#9827;&#8252;            .&#9827;&#8252;            .&#9827;&#8252;            .&#9827;&#8252;
.&#9827;&#8252;                            ........        &#9658;
        .  &#9786;  ....      &#8252;  .&#9788;  &#8252;  &#9786;  .&#9824;&#8252;  . .  &#9786;  .&#9827;&#8252;    ..&#8252;    &#9829;  &#8593;
...........        &#9829;&#9829; &#8735; .  &#9786;...    .&#9650;&#8252; ..&#8252; .&#9650;&#8252; ..&#8252; .&#9660;&#8252; ..&#8252; ............
&#9792;  &#8593; .&#9660;&#8252; .&#9650;&#8252; .&#9660;&#8252; .&#9650;&#8252;          . ...  .&#9787; . . .&#9787; &#8593; &#8594; .&#9660;&#8252;  .  ..  ................
....        &#9792;  &#9650; . . . . . . . . . . . .  ..............        &#9792;  &#8593; ..&#8252; .&#9650;&#8252;
..&#8252; .&#9650;&#8252; ..&#8252; .&#9650;&#8252;  ..    . . . .&#9660;&#8252; &#8597; ¶ .&#9660;&#8252; &#9830;.  ..  ..........&#8252;.........
&#9792;  &#8593; . . . . . . . . . . . . . . . . . . . . . . . . . . .  ........
  &#9650; . . . . . . . . . . . .  ..............        &#9794;  &#8594; . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .  ..........        &#9792; &#9794;  &#8593; .&#9650;&#8252; .&#9660;&#8252; .&#9650;&#8252; .&#9660;&#8252;
.&#9650;&#8252; .&#9660;&#8252;  ...... .&#9794; . . ..&#8252; &#8593; &#8594; ..&#8252; &#9824; ..  ..........&#8252;.........        &#9830; &#9792;  &#9660;  .
..............        &#9830;  &#9650; . . . . . . . . . . . . . . . .  ..............
          &#8595; .............................................. .........        .
  &#8593; ..&#8252; ..&#8252;  . &#9792;  ...
*********************************** SLUT

, men det skulle gerne se således ud

$GPGGA,014411.999,5538.9206,N,01212.9080,E,1,03,2.6,119.9,M,,,,0000*07øø
( har testet med Hyperterminal )
Kan det skyldes at jeg indstillingerne for forbindelsen ?
Som er således

bRet = GetCommState(SerialPort, &dcb);

        if (!bRet)
        {
              return 1;  // Very bad&#8230;
              // do somthing
        }

 
        dcb.BaudRate = CBR_4800;
        dcb.ByteSize = 8;             
        dcb.Parity = NOPARITY;
        dcb.StopBits = ONESTOPBIT;
       
        bRet = SetCommState(SerialPort, &dcb);

        if (!bRet)
        {
            return 2;
                  // Very bad
                // Do somthing
        }

GBM
Avatar billede baltazar_ Nybegynder
09. december 2002 - 16:53 #5
UPS  det kunne forummet ikke lide at få ind *G*

Nå men den skriver derudaf, dog ikke et eneste bogstav--  kun tegn, og jeg ved med sikkerhed at dette indput er i porten

$GPGGA
Avatar billede slepee Nybegynder
09. december 2002 - 18:51 #6
Jeg tror du skal prøve at udskifte din printf(); med putchar();
den udskriver kun ét tegn og ikke en zeroterminated string!
skulle også spare lidt på runtime... men kun en lille bonus! ;)
//printf("%c",buff[i]);
putc(buff[i]);

-- eller noget! :)
Avatar billede baltazar_ Nybegynder
09. december 2002 - 19:25 #7
putchar virker ligesom printf ser det ud til....outputtet er det samme :(
men hvis det optimere koden så det jo den jeg skal bruge.
Men der er stadigt problem med at udskrive det korrekte input.  andre forslag ?
Avatar billede slepee Nybegynder
10. december 2002 - 17:40 #8
Hvorfor er det lige du SKAL udskrive det korrekte input kan du ikke bare hente inputtet ned i en buffer og så strcmp() med en konstant. Hvis du absolut VIL udskrive det nøjagtige, så kan du vel bare gøre noget i stil med...

#define GOE_DATA "$GPGGA,014411.999,5538.9206,N,01212.9080,E,1,03,2.6,119.9,M,,,,0000*07øø"

slimbuf slimbuffer = HentDataSnask();
if(strcmp(slimbuffer, GOE_DATA))
  printf(GOE_DATA);
else
  printf("Aben er IKKE glad!\n");

Det er MIN simple løsning.
Avatar billede baltazar_ Nybegynder
10. december 2002 - 19:38 #9
Slepee:

Jeg kan jo ikke bruge data`ne til noget hvis jeg ikke kan læse dem som de er  :O) .
dit sidste eksempel ser for mig ud til at den sammenligner godt nok min buffer med min tekststreng, for derefter at udskrive definationen og ikke det aktuelle input. Men det for jeg ikke noget ud af andet end bekræftet hvad jeg har defineret GOE_DATA til

Er jeg forkert på den så sig lige til
Avatar billede slepee Nybegynder
11. december 2002 - 20:03 #10
Joh, du har HELT ret, men kan du ikke sige mig hvad det er for et projekt du har gang i, for jeg er ikke helt med.
For hvis (og kun hvis) seriel-enheden har en konstant buffer, kan du så ikke nøjes med at se om den er hvad den skal være... hvis enhedens datamængde derimod IKKE er konstant så kan du ikke bruge min løsnings-ting til noget!

Men for at jeg kan hjælpe dig sådan helt seriøst, kan du så ikke svare mig på følgende ting:
* Hvad er problemet / hvad skal dit program kunne ?
* Hvad er det for en seriel-enhed? Lyder som et modem eller sådan noget!
* Hvad for et system bruger du? Hacker du en Lommeregner med en serielport, eller bruger du en Amstrad fra 1980 ? :O)
* Hvad for en kompiler bruger du? DJGCPP, MS VC++ 6.0 Pro, eller bruger du Bloodsheet? GCC, eller WTF? -> og WTF er *IKKE* en kompiler :O)

Hvis du bruger dos/windows kan du evt. kode en lille assambler rutine der udskriver et enkelt tegn ad gangen... kan sagtens integreres med C / C++, men jeg er ikke sikker på hvad det er for parametre du skal bruge... kan finde ud af det senere hvis du tror det kan hjælpe...

Men det virker simpelthen somom dine header-filer er sat til at udskrive CHAR-typer som hexadecimale talværdier... i stedet for bogstaver.

Anyway, jeg kan ikke skrive sammenhængende i dag! :(
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