我有:
serial = new QSerialPort(this);
serial->setPortName("ttyACM0");
serial->setBaudRate(QSerialPort::Baud9600);
serial->setDataBits(QSerialPort::Data8);
serial->setParity(QSerialPort::NoParity);
serial->setStopBits(QSerialPort::OneStop);
serial->setFlowControl(QSerialPort::NoFlowControl);
if(serial->open(QIODevice::ReadWrite))
{
qDebug()<<"Port is open!";
if(serial->isWritable())
{
qDebug()<<"Yes, i can write to port!";
}
serial->waitForBytesWritten(-1);
serial->write(test.data());
serial->flush(); // Port Error 12 (timed out???)
serial->close()
}
现在,我想通过SerialPort发送它:
{{1}}
我没有结果(也是char / byte值,它们似乎是小于127,但不是那些超过这个值的那些)
我的问题 - &gt;如何将此QByteArray转换为corectly发送所有字节? (我试图在谷歌找到答案,但没有成功/我是新手)
答案 0 :(得分:3)
你几乎肯定不想调用带有const char *的QSerialPort写入重载。查看docs的重载:
将数据从8位字符的零终止字符串写入设备。
但是你没有写一个零终止的C字符串,你正在编写任意二进制数据。所以你需要调用直接接受QByteArray的write重载,如下所示:
serial->write(test);
正如其他一些评论中所述,在调用write之前有关waitForBytesWritten的内容也没有多大意义,但是你最大的问题是尝试将任意数据的QByteArray视为以null结尾的C-String
答案 1 :(得分:0)
他们是crc代码中的错误(从某个Web门户下载) 它被转换为uint16_t而不是uint8_t 现在它确实有效。 谢谢你的帮助!