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 | 1800 (1597) | BlueRunner |
| » | [C] MySQLOddelek: Programiranje | 2949 (1971) | Tutankhamun |
| » | [Winsock & C++]HTTP - Prenašanje binarne datoteke - recv()Oddelek: Programiranje | 1354 (1273) | W3by |
| » | C++Oddelek: Programiranje | 1536 (1298) | zdravcc |
| » | C++ in komunikacija preko LPT pod NT/W2kOddelek: Programiranje | 1244 (1057) | Turbina |