我正在尝试编写一个可以与 propeller 通信的 QT 应用程序通过 USB。通读文档 QSerialPort似乎正是我所需要的。为了进行简单的测试,我尝试将数字“2”发送到我的螺旋桨项目。该项目本身有自己的 OLED 屏幕,我可以在上面读取结果。这是 QT 代码本身:
this->Serial=new QSerialPort(this);
this->Serial->setPortName("/dev/ttyUSB0");
this->Serial->setBaudRate(QSerialPort::Baud9600);
connect(this->Serial,SIGNAL(error(QSerialPort::SerialPortError)),this,SLOT(errorReport(QSerialPort::SerialPortError)));
if(this->Serial->open(QIODevice::ReadWrite))
{
QByteArray dayArray;
QDataStream stream(&dayArray, QIODevice::WriteOnly);
stream << 2;
qDebug()<< dayArray.toHex();
qDebug()<< this->Serial->portName();
if(this->Serial->setDataBits(QSerialPort::Data8))
{
qDebug()<<"bits set to 8";
}
this->Serial->write(dayArray.toHex());
this->Serial->waitForBytesWritten(-1);
this->Serial->close();
}
错误报告槽为:
void serial::errorReport(QSerialPort::SerialPortError error)
{
if(error!=0)
qDebug()<<"ERROR:"<<endl<<error;
}
控制台调试语句打印以下内容:
"00000002"
"ttyUSB0"
bits set to 8
但是,当我读取螺旋桨接收到的值时,它的范围是 0xD0、0xF0 或 0xE0,而不是我期望的 0x02。代码中的波特率与芯片的波特率相匹配,我真的不确定出了什么问题。谁能指出错误吗?
编辑: 我知道螺旋桨代码不是问题,因为它与 Arduino 的 IDE 串行控制台配合良好。
最佳答案
我终于明白了。工作代码如下:
if(this->Serial->open(QIODevice::ReadWrite))
{
this->Serial->setBaudRate(QSerialPort::Baud9600);
this->Serial->setParity(QSerialPort::NoParity);
this->Serial->setStopBits(QSerialPort::OneStop);
this->Serial->setFlowControl(QSerialPort::NoFlowControl);
this->Serial->setDataBits(QSerialPort::Data8);
QByteArray dayArray;
dayArray[0]=2;
this->Serial->write(dayArray);
this->Serial->waitForBytesWritten(-1);
this->Serial->close();
}
关于c++ - 使用 QSerialPort 发送数据时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18806001/