使用QSerialPort从串行端口读取故障

时间:2019-06-09 23:31:06

标签: c++ qt

使用QSerialPort从arduino读取时遇到麻烦。我向arduino发送了一个非零的字符以开始发送字节,但我收到了垃圾。我认为那是因为我读错了。数据由标头的两个字节,长度的一个字节,日期,温度和距离的字节组成。我想知道我的编程是否很好。对不起,我的英语,谢谢。

void DecoSerialPort::startSerialPort()
{
    foreach(const QSerialPortInfo &serialPortInfo, QSerialPortInfo::availablePorts())
    {
        if(serialPortInfo.hasVendorIdentifier() && serialPortInfo.hasProductIdentifier())
        {
            if(serialPortInfo.vendorIdentifier() == arduino_uno_vendor_id)
            {
                if(serialPortInfo.productIdentifier() == arduino_uno_product_id)
                {
                    arduino_port_name = serialPortInfo.portName();
                    arduino_is_available = true;
                }
            }
        }
    }

    if(arduino_is_available)
    {
        // open and configure the serialport
        arduino->setPortName(arduino_port_name);
        if(!arduino->open(QIODevice::ReadWrite))
        qDebug() << arduino->errorString();

        arduino->setBaudRate(QSerialPort::Baud9600);
        arduino->setDataBits(QSerialPort::Data8);
        arduino->setParity(QSerialPort::NoParity);
        arduino->setStopBits(QSerialPort::OneStop);
        arduino->setFlowControl(QSerialPort::NoFlowControl);
    }else
    {
        // give error message if not available
        QMessageBox::warning(this, "Port error", "Couldn't find the     Arduino!");
    }
}


void DecoSerialPort::getTrama(Temperatura &temp, Distancia &dist)
{
    char *data = nullptr;
    startSerialPort();
    data = new char[2];

    if(arduino->isReadable())
    {

        arduino->read(data,2);

        while(headerH != *data)arduino->read(data,2);
        if (headerL == *(data+1))
        {

            arduino->read(data,1);
            length = *data;
            data = new char[length];
            arduino->read(data,length);

            temp.setFecha(data);
            temp.setValue (data + 12);
            dist.setFecha(data);
            dist.setValue (data + 4);
        }
    }
    delete [] data;
}

0 个答案:

没有答案