#include <windows.h>
std::string portNumber;
HANDLE hSerial;
bool connected;
COMSTAT status;
DWORD errors;
bool connectPrinter(char *portName){
//Connects to the port.
this->hSerial = CreateFileA(portName,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(this->hSerial==INVALID_HANDLE_VALUE)
{
if(GetLastError()==ERROR_FILE_NOT_FOUND){
printf("ERROR: Handle was not attached. Reason: %s not available.\n", portName);
return false;
}
else
{
//If port is in use by another program or did not closed previous process.
printf("ERROR!!! \n");
CloseHandle(hSerial);
return false;
}
}
else
{
DCB dcbSerialParams = {0};
if (!GetCommState(this->hSerial, &dcbSerialParams))
{
printf("failed to get current serial parameters!");
return false;
}
else
{
// Set Serial Port specifications.
//TODO:Different Baudrates will be added with respect to Combobox baudRateList selection.
dcbSerialParams.BaudRate=CBR_115200;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
if(!SetCommState(hSerial, &dcbSerialParams))
{
printf("ALERT: Could not set Serial Port parameters");
return false;
}
else
{
this->connected = true;
printf("Connection Successful for :%s !!! \n" ,portName);
//Wait 2s as the arduino board will be reseting
return true;
Sleep(ARDUINO_WAIT_TIME);
}
}
}
}
int readData(char *buffer,unsigned int nbChar){
DWORD bytesRead;
DWORD dwCommModemStatus;
//Set the type of data to be caught.(RXCHAR -> Data available on RX pin.)
SetCommMask (this->hSerial, EV_RXCHAR );
while (this->hSerial != INVALID_HANDLE_VALUE)
{
// Wait for an event to occur for the port.
WaitCommEvent (this->hSerial, &dwCommModemStatus, 0);
if (dwCommModemStatus & EV_RXCHAR )
{
//unsigned int toRead;
//ClearCommError(this->hSerial, &this->errors, &this->status);
if(this->status.cbInQue>0)
do
{
// Read the data from the serial port.
ReadFile (this->hSerial, buffer, 1, &bytesRead, 0);
// Display the data read.
if (bytesRead == 1)
printf ("%s" ,buffer);
} while (bytesRead > 0);
}
}
//}
//If nothing has been read, or that an error was detected return -1
return -1;
}
void main() {
char* buffer = new char (32768);
int nbChar= 32768;
connectPrinter("COMx"); // Use your port number to connect
readData(buffer,nbChar);
}
try this one, it should work. Comment below if it does not work. You have to reset Arduino to read data in method void setup() in Arduino code. I recommend you to use C#, Java or Python for efficiency.