I have a gyroscope (MPU6050) attached to my Arduino UNO. I have written a Processing script to read the serial data(get the angles) from the Gyroscope and its working fine. Now I would like to integrate it with a C++ OpenCV project. I use this tutorial class for serial communications:http://playground.arduino.cc/Interfacing/CPPWindows
However, the serial communications is very slow, the 256 char array is filled in around 1.5 seconds. Thats around 170 chars/sec = 1.36 kbps.
So the question is: If the serial port works fast for Processing how come it is much slower using C++? Is there any alternative way for reading the gyroscope data to C++?
Here is the function which is triggered after each frame I capture from the webcam to get the serial data
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;
}