这就是我想要做的事情。我已经有了一些函数,例如用于向串行端口写入数据的函数,它可以完美地工作:
bool WriteData(char *buffer, unsigned int nbChar)
{
DWORD bytesSend;
//Try to write the buffer on the Serial port
if(!WriteFile(hSerial, (void *)buffer, nbChar, &bytesSend, 0))
{
return false;
}
else
return true;
}
阅读功能是这样的:
int ReadData(char *buffer, unsigned int nbChar)
{
//Number of bytes we'll have read
DWORD bytesRead;
//Number of bytes we'll really ask to read
unsigned int toRead;
ClearCommError(hSerial, NULL, &status);
//Check if there is something to read
if(status.cbInQue>0)
{
//If there is we check if there is enough data to read the required number
//of characters, if not we'll read only the available characters to prevent
//locking of the application.
if(status.cbInQue>nbChar)
{
toRead = nbChar;
}
else
{
toRead = status.cbInQue;
}
//Try to read the require number of chars, and return the number of read bytes on success
if(ReadFile(hSerial, buffer, toRead, &bytesRead, NULL) && bytesRead != 0)
{
return bytesRead;
}
}
//If nothing has been read, or that an error was detected return -1
return -1;
}
无论我在Arduino上做什么,这个函数总是返回-1,我甚至尝试加载一个不断向串口写入字符的代码,但没有任何效果。我从这里得到了这些函数:http://playground.arduino.cc/Interfacing/CPPWindows,所以我的函数基本相同。我只是将它们复制到我的代码中而不是使用它们作为类对象,但更重要的是它们是相同的。所以这就是我的问题,我可以向串口写入数据,但无法读取,我该怎么办?
GetLastError
函数返回了什么信息?你确定设备确实在向你发送数据吗? - Mats PeterssoncbInQue
的 if 语句将失败。 - Mats Petersson