--------------------------------------------------- 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
$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… // do somthing }
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]);
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 ?
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...
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
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! :(
Synes godt om
Ny brugerNybegynder
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.