Я использую Win32 API, Visual Studio 2008. Я могу читать байты из последовательного порта, но не так, как я предполагаю, я передаю данные из Arduino в формате X, Y. Но мой код ниже иногда читается у сначала, а потом х. Как я могу прочитать данные в правильном порядке, я имею в виду в порядке х, у. в случае, если кто-то заинтересован, координаты будут переданы другой функции, и курсор мыши будет соответственно перемещаться. Вот мой код:
int _tmain( int argc, TCHAR *argv[] )
{
HANDLE hComm;
DWORD bytesRead = 0;
POINT mouseCoords; /*structur to hold mouse coordinates*/
DCB dcb = {0}; /*Device Control Block, used to configure serial port settings
here we initialize dcb structure to zero. Good practice!*/
COMMTIMEOUTS ct;
int loop = 1;
int counter = 10;
/*get handle to serial port*/
hComm = CreateFile(g_pcCommPort,
GENERIC_WRITE | GENERIC_READ,
0, /* must be opened with exclusive-access */
NULL, /* default security attributes*/
OPEN_EXISTING, /* must use OPEN_EXISTING for serial ports*/
0, /*non overlapped I/O, blocking*/
NULL ); /*hTemplate must be NULL for comm devices*/
/*Make sure that serial port is successfuly opened*/
if ( hComm == INVALID_HANDLE_VALUE ) {
errMsg(TEXT("Cannot access serial port!"));
return 0;
}
ASSERT("Serial port access successful!");
/*get serial port status i.e default settings and make
sure we can access them*/
if ( !(GetCommState(hComm, &dcb))) {
errMsg(TEXT("Cannot access current DCB settings!"));
return 0;
}
ASSERT("DCB settings access successful!");
/*print dcb settings so that we can get an idea of default settings*/
printCommSettings(dcb);
/*Since we were successful in accessing the com port
we can go ahead and set it manually to our desired
settings*/
if ( !(setupSerialPort(&dcb))) {
errMsg(TEXT("Cannot setup serial port!"));
return 0;
}
ASSERT("DCB config successful!");
/*lets print configuration after setting up the
serial port just to make sure everything is ok*/
printCommSettings(dcb);
ct.ReadIntervalTimeout = 50;
ct.ReadTotalTimeoutConstant = 50;
ct.ReadTotalTimeoutMultiplier = 10;
ct.WriteTotalTimeoutConstant = 50;
ct.WriteTotalTimeoutMultiplier = 10;
if(SetCommTimeouts(hComm, &ct) == 0) {
errMsg(TEXT("Cannot setup comm timout!"));
}
while (loop)
{
if ( !(ReadFile(hComm,g_buffer,5,&bytesRead,NULL)) ) { loop = 0; }
printf("Message Read: %s==%d\r", g_buffer, bytesRead);
} /*while loop*/
if ( !(CloseHandle(hComm))) {
errMsg(TEXT("Serial port handle error!"));
}
NEWLINE;
return 0;
}
EDIT:
это настройки последовательного порта:
"9600, N, 8,1"
Я передаю 10,12, и вот что я получаю:
ВЫВОД:
Прочитанное сообщение:, 12
Прочитанное сообщение: 10,12
Прочитанное сообщение: 12
Прочитано сообщение: 0,12
Прочитанное сообщение: 2
Прочитанное сообщение:, 12
Прочитанное сообщение: 10,12
Прочитанное сообщение: 12
Прочитанное сообщение: 0,12
Прочитанное сообщение: 2
Прочитанное сообщение:, 12
Прочитанное сообщение: 10,12