venerdì 5 luglio 2013

Porta seriale in Qt

Per leggere e scrivere i valori per la porta seriale si possono utilizzare varie librerie. In questo caso viene presentato un esempio relativo alla libreria Qt Serial Port che si trova sul sito ufficiale Qt

La libreria e' valida sia per Qt4 che Qt5

Una volta scaricato il pacchetto si entra nella directory e si digita
qmake
make 
make install

a questo punto si puo' creare un nuovo progetto Qt4
la prima cosa da modificare e' il file .pro aggiungendo la serialport
--------------------------------
QT       += core gui
CONFIG += serialport

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = seri
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h


FORMS    += mainwindow.ui
--------------------------------

dopo di cio' si modifica il file header aggiungendo l'include all'header della libreria, uno slot privato per la funzione di lettura della porta ed una nuova variabile che identifica la porta seriale
--------------------------------
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtSerialPort/QSerialPort>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
    
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void readData();

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

};

#endif // MAINWINDOW_H

--------------------------------

il programma vero e proprio puo' essere cosi' scritto
In questo caso viene letta la porta /dev/ttyUSB0 con parametri 2400 8N1

--------------------------------
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QtSerialPort/QSerialPort>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    serial = new QSerialPort(this);
    serial->setPortName("/dev/ttyUSB0");

    if (serial->open((QIODevice::ReadWrite)))
    {
    serial->setBaudRate(QSerialPort::Baud2400);
    serial->setDataBits(QSerialPort::Data8);
    serial->setParity(QSerialPort::NoParity);
    serial->setStopBits(QSerialPort::OneStop);
    }

    connect(serial,SIGNAL(readyRead()),this,SLOT(readData()));
}

void MainWindow::readData()
{
    QByteArray data = serial->readAll();

    qDebug() << data;

}

MainWindow::~MainWindow()
{
    delete ui;

}
--------------------------------

2 commenti:

  1. non riesco ad installare, mi ritorna invariabilmente: in file included from example/serialport/terminal/main.cpp:45:0:examples/serialport/terminal/mainwindow.h:50:37: fatal error: QtSerialPort/QSerialport: file or directory non esistente. compilation terminated

    RispondiElimina
    Risposte
    1. il pacchetto QtSerial non e' compreso nell'installazione standard di Qt. E' stata compilata la libreria che si trova citata al link presente nel post http://qt-project.org/wiki/QtSerialPort ?? L'esempio riportato e' per Qt 4.x, per caso lei sta usando Qt 5??

      Elimina

ESP32 logger low power

A seguito del precedente post in questo caso il logger e' stato fatto con una ESP32S3  Al contrario di Arduino dove i dati erano salvat...