无法使用QSerialPort发送数据

时间:2013-09-14 20:13:05

标签: c++ serial-port qt5

我正在尝试编写一个可以通过USB与propeller通信的QT应用程序。阅读文档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串行控制台一起使用。

1 个答案:

答案 0 :(得分:3)

我终于明白了。工作代码如下:

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();
}