使用c++从Arduino读取串行数据

Reading serial data from an Arduino using C++

本文关键字:数据 读取 Arduino c++ 使用      更新时间:2023-10-16

这就是我要做的。我已经有了一些功能,例如这个将数据写入串行端口的功能,它工作得很好:

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

所以我的函数基本上是一样的。我只是将它们复制到我的代码中,而不是将它们用作类对象,但除此之外,它们是相同的。

所以这是我的问题,我可以写数据到串行,但我不能读,我能做什么?

对于感兴趣的人来说,我已经解决了这个问题,这是一个愚蠢的错误。我对Arduino进行了编程,以便它在发送任何内容之前等待串行输入。计算机程序编写和发送一行又一行的代码,我猜i7比Atmel快…显然,收集数据需要一些时间。

添加睡眠(10);在从计算机读取端口之前就足够最终读取数据了。

感谢@Matts的帮助。