Почему я читаю мусор с последовательного порта? - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь получить последовательные данные и отобразить их в графическом интерфейсе, который я сделал в QT для этого, когда я пытаюсь получить последовательные данные и отобразить их в выводе, он показывает мне это значение типа мусора."? \ U0004? # \ U0004 ?? \ u0004? # \ U001C ??""? \ u0004? # \ u0004 ?? \ u0004? # \ u001C ??? \ u0004? # \ u001C"

весь этот код приведен ниже, но строки преступника являются функцией "readserial" в последнем.

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


Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    ui->label->setText("0");
    arduino = new QSerialPort(this);
    serialBuffer = "";
    bool arduino_is_availabe = false;
    QString arduino_uno_port_name;
    foreach(const QSerialPortInfo &serialPortInfo, QSerialPortInfo::availablePorts())
    {
        if(serialPortInfo.hasProductIdentifier() && serialPortInfo.hasVendorIdentifier())
        {
            if((serialPortInfo.productIdentifier() == arduino_uno_product_id) && (serialPortInfo.vendorIdentifier() == arduino_uno_vendor_id))
            {
                arduino_is_availabe = true;
                arduino_uno_port_name = serialPortInfo.portName();
            }
        }
    }
    if(arduino_is_availabe)
    {
        qDebug() <<"Found the arduino port...\n";
        arduino->setPortName(arduino_uno_port_name);
        arduino->open(QSerialPort::ReadOnly);
        arduino->setBaudRate(QSerialPort::Baud9600);
        arduino->setBaudRate(QSerialPort::Data8);
        arduino->setFlowControl(QSerialPort::NoFlowControl);
        arduino->setParity(QSerialPort::NoParity);
        arduino->setStopBits(QSerialPort::OneStop);
        QObject::connect(arduino, SIGNAL(readyRead()), this, SLOT(readSerial()));

    }else
    {
        qDebug() <<"Couldn't find the correct port for the arduino.\n";
        QMessageBox::information(this, "serial port error", "couldn't open the serial port to arduino ");

    }
}
Dialog::~Dialog()
{
      if(arduino->isOpen())
       {
          arduino->close(); //    Close the serial port if it's open.
        }
    delete ui;
}
void Dialog::readSerial()
{
    QByteArray serialData;
    serialData=arduino->readAll();
    serialBuffer+=QString::fromStdString(serialData.toStdString());
    qDebug()<<serialBuffer;
}
void Dialog::on_label_linkActivated(const QString &link)
{
    ui->label->setText(serialBuffer);
}

1 Ответ

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

Я думаю, что ваша проблема именно здесь:

arduino->setBaudRate(QSerialPort::Baud9600);
arduino->setBaudRate(QSerialPort::Data8);

Вы устанавливаете скорость передачи данных два раза подряд, что не имеет смысла.Во второй строке вы устанавливаете значение QSerialPort :: Data8 , поэтому, возможно, вы пытаетесь определить метод setDataBits .Это будет выглядеть так:

arduino->setBaudRate(QSerialPort::Baud9600);
arduino->setDataBits(QSerialPort::Data8);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...