Ошибка в программе QT c ++, показывает, что arduino не найден - PullRequest
0 голосов
/ 28 сентября 2018

Я изучаю QT и следую видео-уроку для практики.код приведен ниже, если в написанном мною заявлении arduino не найдено, print, arduino не найдено.Но это всегда выдает эту ошибку, в моей программе есть какая-то проблема, но я не могу ее диагностировать, помогите мне.это программа

#include "dialog.h"
#include "ui_dialog.h"
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QDebug>
#include <QtWidgets>


Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)

{
    ui->setupUi(this);
    arduino_is_available = false;
    arduino_port_name = "";
    arduino = new QSerialPort;
    /*qDebug() << "Number of available ports:  " <<QSerialPortInfo::availablePorts().length();
    foreach(const QSerialPortInfo &serialPortInfo, QSerialPortInfo::availablePorts()){
        qDebug() <<"Has vendorID: " << serialPortInfo.vendorIdentifier();
        if(serialPortInfo.hasVendorIdentifier()){
            qDebug() <<"Vendor ID:" <<serialPortInfo.vendorIdentifier();

        }
        qDebug() <<"Has product ID:" <<serialPortInfo.hasProductIdentifier();
        if(serialPortInfo.hasProductIdentifier()){
            qDebug() <<"Product ID:" <<serialPortInfo.productIdentifier();
        }
    }
    */
    foreach(const QSerialPortInfo &serialPortInfo, QSerialPortInfo::availablePorts()){
        if(serialPortInfo.hasVendorIdentifier() && serialPortInfo.hasProductIdentifier()){
            if(serialPortInfo.hasVendorIdentifier() == arduino_uno_vendor_id){
                if(serialPortInfo.hasProductIdentifier() == 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);
            arduino->open(QSerialPort::WriteOnly);
            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!");
        }
    }

}

Dialog::~Dialog()
{
    if(arduino->isOpen()){
        arduino->close();

    }
    delete ui;
}

void Dialog::on_redslider_valueChanged(int value)
{
ui->redvalue->setText(QString("<span style=\" font-size:18pt; font-weight:600;\">%1</span>").arg(value));
Dialog::updateRGB(QString("r%1").arg(value));
qDebug() <<value;
}
void Dialog::on_greenslider_valueChanged(int value)
{
    ui->greenvalue->setText(QString("<span style=\" font-size:18pt; font-weight:600;\">%1</span>").arg(value));
    Dialog::updateRGB(QString("g%1").arg(value));
    qDebug() <<value;
}
void Dialog::on_blueslider_valueChanged(int value)
{
    ui->bluevalue->setText(QString("<span style=\" font-size:18pt; font-weight:600;\">%1</span>").arg(value));
    Dialog::updateRGB(QString("b%1").arg(value));
    qDebug() <<value;
}
void Dialog::updateRGB(QString command)
{
    if(arduino->isWritable()){
       arduino->write(command.toStdString().c_str());
}    else{
            qDebug() << "Couldn't write to serial";
}
}

1 Ответ

0 голосов
/ 28 сентября 2018

Вы сравниваете логическое значение с целым числом (или другим типом) в двух тестах для идентификатора поставщика и идентификатора продукта.

serialPortInfo.hasVendorIdentifier() возвращает bool, и вы выполняете тест на равенство с некоторым неизвестным значениемarduino_uno_vendor_id это, конечно, не может быть глупым.Возможно строка.

То же самое для идентификатора продукта.

'Twill всегда будет FALSE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...