我目前正在从事一个涉及 Arduino 和笔记本电脑之间串行通信的项目。我知道 Arduino 确实在发送我需要的数据,请看这张图片:http ://s1.postimg.org/w5wisaetr/Help.png
现在在另一端,我的笔记本电脑连接到 Arduino 并运行我使用 QT Creator 制作的程序。但是,当从串行端口读取数据时,我无法让程序显示此信息。
我连接了 readData() 函数,以便在接收到这样的数据时执行:
connect(m_serialPort, SIGNAL(readyRead()), m_dataGathering, SLOT(newData()));
这有效,并且每当从 Arduino 传输某些内容时都会调用 newData() 函数。但是函数 newData() 不显示我需要的数据。
新数据():
void DataGathering::newData()
{
QByteArray rMsg = m_serial->readAll();
qDebug() << rMsg.constData();
}
这只会向显示器发送空消息。像这样:http ://s2.postimg.org/dkcyip2u1/empty.png
但是,以下代码有效:
void DataGathering::newData()
{
QByteArray rMsg("\nTest...");// = m_serial->readAll();
qDebug() << rMsg.constData();
}
此代码按应有的方式显示消息。然而,输出显示的另一个区别是,当执行工作代码时,我的控制台也会显示很多帧错误,我认为这是因为不需要的字符的波特率与我需要的数据不同。
这就是我开始质疑 readAll() 函数的原因。同样明显的是,Arduino 不仅发送了我需要的数据,还发送了一些不需要的字符(参见第一个链接中的图像),但我不认为这是一个问题,因为我稍后会过滤掉它。
非常感谢所有帮助。
更新:我发现 readAll() 函数返回的 QByteArrays 的 size() 等于 0。