У меня есть гироскоп (MPU6050), прикрепленный к моему Arduino UNO. Я написал сценарий обработки, чтобы прочитать серийные данные (получить углы) от гироскопа, и он работает нормально.
Теперь я хотел бы интегрировать его с проектом C ++ OpenCV. Я использую этот учебный класс для последовательной связи: http://playground.arduino.cc/Interfacing/CPPWindows
Однако последовательная связь очень медленная, массив из 256 символов заполняется примерно за 1,5 секунды. То есть около 170 символов / сек = 1,36 кбит / с.
Таким образом, вопрос: если последовательный порт работает быстро для обработки, почему он намного медленнее с использованием C ++? Есть ли альтернативный способ чтения данных гироскопа в C ++?
Вот функция, которая срабатывает после каждого кадра, который я снимаю с веб-камеры, чтобы получить последовательные данные
int Serial::ReadandClose(char *buffer, unsigned int nbChar, const char* portName)
{
wchar_t wtext[20];
mbstowcs(wtext, portName, strlen(portName)+1);//Plus null
LPWSTR PortSpecifier = wtext;
DCB dcb;
int retVal;
BYTE Byte;
DWORD dwBytesTransferred;
DWORD dwCommModemStatus;
HANDLE hPort = CreateFile(
PortSpecifier,
GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
0,
NULL
);
if (!GetCommState(hPort,&dcb))
return 0x100;
dcb.BaudRate = CBR_115200;
dcb.ByteSize = 8; //8 data bits
dcb.Parity = NOPARITY; //no parity
dcb.StopBits = ONESTOPBIT; //1 stop
if (!SetCommState(hPort,&dcb))
return 0x100;
SetCommMask (hPort, EV_RXCHAR | EV_ERR); //receive character event
WaitCommEvent (hPort, &dwCommModemStatus, 0); //wait for character
if (dwCommModemStatus & EV_RXCHAR)
{
clock_t begin =clock();
ReadFile (hPort, buffer, 256, &dwBytesTransferred, 0);
clock_t end = clock();
double elapsed_secs = double(end-begin) / CLOCKS_PER_SEC;
cout<<elapsed_secs<<endl;
}
else if (dwCommModemStatus & EV_ERR)
retVal = 0x101;
CloseHandle(hPort);
return dwBytesTransferred;
}
Задача ещё не решена.