Forum » Programiranje » (C++) serijsko pošiljanje 'short' podatkov
(C++) serijsko pošiljanje 'short' podatkov
dife ::
Preko serijskega porta želim pošiljati 3 mestna števila od 0 do 999. Zaenkrat to izvajam tako, da vsako števko predstavim kot string, tako da za 3 mestno število, pošljem 3 byte. Ker bi želel, da bi prenos bil hitrejši, sem pomislil, da bi število poslal v binarni obliki (npr.: število 266 bi poslal kot 00000001 111111111 ), za kar bi potreboval le 2 byte-a, a mi to ne uspe.
Delovanje preizkušam s programom, ki pošilja podatke o koordinatah miške na konzolnem oknu in sicer na arduino board, na katerem ob prenosu podatkov utripa lučka.
Na Arduino forumu so mi svetovali naj uporabim if(!WriteFile(hSerial, (void*)x, sizeof(x), &dwBytesRead, NULL)){}, pri čemer naj bo tip spremenljivke primerne velikosti (predpostavljam, da bi za 2 byte-a bil primeren 'short'), a žal lučka ne utripa. Spodaj je del kode:
Morda kdo ve zakaj podatki niso poslani?
Delovanje preizkušam s programom, ki pošilja podatke o koordinatah miške na konzolnem oknu in sicer na arduino board, na katerem ob prenosu podatkov utripa lučka.
Na Arduino forumu so mi svetovali naj uporabim if(!WriteFile(hSerial, (void*)x, sizeof(x), &dwBytesRead, NULL)){}, pri čemer naj bo tip spremenljivke primerne velikosti (predpostavljam, da bi za 2 byte-a bil primeren 'short'), a žal lučka ne utripa. Spodaj je del kode:
HANDLE hSerial; hSerial = CreateFile("COM7", GENERIC_WRITE | GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); if(hSerial==INVALID_HANDLE_VALUE){ if(GetLastError()==ERROR_FILE_NOT_FOUND){}} DCB dcbSerialParams = {0}; if (!GetCommState(hSerial, &dcbSerialParams)) dcbSerialParams.BaudRate=CBR_9600; dcbSerialParams.ByteSize=8; dcbSerialParams.StopBits=ONESTOPBIT; dcbSerialParams.Parity=NOPARITY; if(!SetCommState(hSerial, &dcbSerialParams)){} short x = InRec.Event.MouseEvent.dwMousePosition.X if(!WriteFile(hSerial, (void*)x, sizeof(x), NULL, NULL)){}
Morda kdo ve zakaj podatki niso poslani?
mallard ::
Najbrž ne bo rešilo tvoje težave - pri klicu na WriteFile castaš short v void*:
if (!WriteFile(hSerial, (void*) &x, sizeof(x), NULL, NULL)) {} // ^ rabiš naslov
Senitel ::
if (!GetCommState(hSerial, &dcbSerialParams)) dcbSerialParams.BaudRate=CBR_9600;
Tole tudi ni najbolj cool thing in the world.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [baze] Povezava do slike ali BLOB?Oddelek: Programiranje | 1658 (1455) | BlueRunner |
» | [C] MySQLOddelek: Programiranje | 2812 (1834) | Tutankhamun |
» | [Winsock & C++]HTTP - Prenašanje binarne datoteke - recv()Oddelek: Programiranje | 1232 (1151) | W3by |
» | C++Oddelek: Programiranje | 1416 (1178) | zdravcc |
» | C++ in komunikacija preko LPT pod NT/W2kOddelek: Programiranje | 1137 (950) | Turbina |