Ich möchte qt und ein Gerät mit UART-Kabel (RS232C) in Linux verbinden.Qt serielle Kommunikation mit UART RS232C
Ich schreibe Code, macht ui und funktioniert, aber es funktioniert nicht.
Ich möchte verbinden, wenn ich auf eine Schaltfläche (ui) Gerät einschalten und verbinden.
Auch ich möchte eine Funktion machen, die, wenn ich ein Befehlsgerät eingeben wird erkennen und ausführen.
Unten ist mein Code, jemand mir bitte helfen.
<mainwindow.cpp>
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtSerialPort/QSerialPort>
#include <QMessageBox>
#include <QObject>
#include <QIODevice>
#include <QDebug>
QSerialPort serial;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
QSerialPort*port=new QSerialPort();
port->setPortName("/dev/ttyUSB0");
port->setBaudRate(QSerialPort::Baud19200);
port->setDataBits(QSerialPort::Data8);
port->setParity(QSerialPort::NoParity);
port->setStopBits(QSerialPort::OneStop);
port->setFlowControl(QSerialPort::NoFlowControl);
port->open(QIODevice::ReadWrite);
ui->setupUi(this);
serial = new QSerialPort(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_connect_clicked()
{
port=new QSerialPort();
QObject::connect(port,SIGNAL(readyRead()),this,
SLOT(on_pushButton_connect_clicked()));
if(!port->open(QIODevice::ReadWrite)){
QMessageBox::information(this, tr("connect"),
"serialcommunication start");
}
else
{
QMessageBox::critical(this, tr("fail"), serial-
>errorString());
}
}
void MainWindow::on_pushButton_disconnect_clicked()
{
port->close();
QMessageBox::information(this, tr("disconnect"), "serial
communication end");
}
<mainwindow.h>
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtSerialPort/QSerialPort>
#include <QMessageBox>
#include <QIODevice>
#include <QDebug>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
QSerialPort*serial; //plus
QSerialPort*port;
QWidget*main_widget;
void readData();
~MainWindow();
private slots:
void on_pushButton_connect_clicked();
void on_pushButton_disconnect_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
<main.cpp>
#include "mainwindow.h"
#include <QApplication>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QDebug>
#include <QMessageBox>
#include <QIODevice>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
foreach(const QSerialPortInfo
&info,QSerialPortInfo::availablePorts()){
QSerialPort serial;
serial.setPort(info);
if (serial.open(QIODevice::ReadWrite))
serial.close();
}
MainWindow w;
w.show();
return a.exec();
}
danke für Ihre Antwort. Wie Sie mir geraten haben, habe ich den Code geschrieben. aber wenn ich den "connect" -Button vorbehalte, merkt sich das an. Wie kann ich Geräte verbinden oder nicht? Und das letzte, was du gesagt hast "mSerialPort-> write (" Some command ");" wie implementieren? Ich habe den Code und das Kommando einzeln geschrieben? – kararara
Wenn Sie auf connect drücken, wird nur die Verbindung mit dem Gerät gestartet und versucht, Daten von der seriellen Schnittstelle zu lesen. Wenn vom Gerät keine Daten gesendet werden, sehen Sie nichts. Wenn Sie überprüfen möchten, ob das Gerät verbunden ist, rufen Sie einfach isOpen() auf (mSerialPort-> isOpen()). –
Um Daten an das Gerät zu senden, erstellen Sie eine neue Schaltfläche, zum Beispiel senden, so dass Sie Slot void MainWindow :: on_pushButton_send_clicked() {mSerialPort-> schreiben ("Einige Befehl");} –