C ++ Arduino Медленная последовательная связь

У меня есть гироскоп (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;
}

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]