LINUX.ORG.RU

История изменений

Исправление keeper_b, (текущая версия) :

Упростил код, проверил в винде работает (счётчик на него отвечает) в linux нет.

mainwindow.hpp

#ifndef MAINWINDOW_HPP
#define MAINWINDOW_HPP

#include <QMainWindow>
#include <QSerialPort>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void read();
    void errorSerail(QSerialPort::SerialPortError err);

    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
    QSerialPort *serial;
};

#endif // MAINWINDOW_HPP

mainwindow.cpp

#include "mainwindow.hpp"
#include "ui_mainwindow.h"

#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    serial(new QSerialPort(this))
{
    ui->setupUi(this);

    serial->setPortName("/dev/ttyXRUSB0");
    serial->setBaudRate(QSerialPort::Baud9600);
    serial->setDataBits(QSerialPort::Data8);
    serial->setParity(QSerialPort::NoParity);
    serial->setStopBits(QSerialPort::OneStop);
    serial->setFlowControl(QSerialPort::NoFlowControl);

    serial->open(QIODevice::ReadWrite);

    if(serial->isWritable())
    {
        qDebug() << "Yes, i can write to port!";
    }

    connect(serial, SIGNAL(readyRead()),
            this, SLOT(read()));
    connect(serial, SIGNAL(error(QSerialPort::SerialPortError)),
            this, SLOT(errorSerail(QSerialPort::SerialPortError)));

    serial->clear();

    QByteArray be = QByteArray::fromHex("000BDF2F2F4A32");
    qint64 bytesWrited = serial->write(be, 7);
    serial->flush();
    qint64 bytesAvailable = serial->bytesAvailable();
    qDebug() << "Bytes writed: " << bytesWrited;
    qDebug() << "Bytes available: " << bytesAvailable;
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::read()
{
    QByteArray bytes = serial->readAll();
    qDebug() << QString(bytes.toHex().toUpper());
}

void MainWindow::errorSerail(QSerialPort::SerialPortError err)
{
    qDebug() << "Error: " << err;
}

void MainWindow::on_pushButton_clicked()
{
    serial->close();
}

Исходная версия keeper_b, :

Упростил код, проверил в винде работает в linux нет.

mainwindow.hpp

#ifndef MAINWINDOW_HPP
#define MAINWINDOW_HPP

#include <QMainWindow>
#include <QSerialPort>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void read();
    void errorSerail(QSerialPort::SerialPortError err);

    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
    QSerialPort *serial;
};

#endif // MAINWINDOW_HPP

mainwindow.cpp

#include "mainwindow.hpp"
#include "ui_mainwindow.h"

#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    serial(new QSerialPort(this))
{
    ui->setupUi(this);

    serial->setPortName("/dev/ttyXRUSB0");
    serial->setBaudRate(QSerialPort::Baud9600);
    serial->setDataBits(QSerialPort::Data8);
    serial->setParity(QSerialPort::NoParity);
    serial->setStopBits(QSerialPort::OneStop);
    serial->setFlowControl(QSerialPort::NoFlowControl);

    serial->open(QIODevice::ReadWrite);

    if(serial->isWritable())
    {
        qDebug() << "Yes, i can write to port!";
    }

    connect(serial, SIGNAL(readyRead()),
            this, SLOT(read()));
    connect(serial, SIGNAL(error(QSerialPort::SerialPortError)),
            this, SLOT(errorSerail(QSerialPort::SerialPortError)));

    serial->clear();

    QByteArray be = QByteArray::fromHex("000BDF2F2F4A32");
    qint64 bytesWrited = serial->write(be, 7);
    serial->flush();
    qint64 bytesAvailable = serial->bytesAvailable();
    qDebug() << "Bytes writed: " << bytesWrited;
    qDebug() << "Bytes available: " << bytesAvailable;
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::read()
{
    QByteArray bytes = serial->readAll();
    qDebug() << QString(bytes.toHex().toUpper());
}

void MainWindow::errorSerail(QSerialPort::SerialPortError err)
{
    qDebug() << "Error: " << err;
}

void MainWindow::on_pushButton_clicked()
{
    serial->close();
}