我目前正在从事一个项目,涉及到Arduino和笔记本电脑之间的串行通信。我知道Arduino确实在发送我需要的数据,请看这张图片:http://s1.postimg.org/w5wisaetr/Help.png
现在,在另一端,我的笔记本电脑连接到Arduino,运行我使用QT创建的程序。但是,当从串口读取数据时,我无法让程序显示这些信息。
我将readData()函数连接起来,以便在收到数据时执行,如下所示:
connect(m_serialPort, SIGNAL(readyRead()), m_dataGathering, SLOT(newData()));这是可行的,只要从Arduino传输的内容,就会调用newData()函数。但是,函数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大小()等于0。
发布于 2014-03-27 07:52:56
如果串行端口QIODevice返回0,它就不会实现bytesAvailable。这也可能是readAll()失败的原因,这取决于它是如何实现的。但至少readAll()存在无法报告错误的问题。
尝试使用read方法来进行更好的诊断,如以下(未经测试):
void DataGathering::newData()
{
QByteArray rMsg;
for(;;) {
char buf[256]; // read data in this size chunks
qint64 len = m_serial->read(buf, sizeof buf);
if (len <= 0) {
if (len < 0) {
qDebug() << "newData() read error" << m_serial->errorString();
}
break; // for(;;)
}
rMsg.append(buf, len);
}
qDebug() << "newData() got byte array" << rMsg.size() << ":" << rMsg;
}它可能解决不了你的问题,但幸运的话,它会给你错误信息。
https://stackoverflow.com/questions/22614945
复制相似问题