linuxのUARTケーブル(RS232C)を使用してqtとデバイスを接続します。UART RS232Cを使用したQtシリアル通信
私はコードを書いて、UIを作成していますが、動作しません。
私はいくつかのボタン(ui)デバイスをオンにして接続するときに接続したいと思います。
また、私はいくつかのコマンドを入力してデバイスが認識して実行する機能を作りたいと思っています。
以下は私のコードです。誰か助けてください。
あなたのデバイスは常には/ dev/ttyUSB0に接続されることが保証されていないすべての<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();
}
ご返信ありがとうございます。あなたがアドバイスしたように、私はコードを書いた。しかし、もし私が "接続"ボタンを押すことを覚えていれば、不自然なことに気づくでしょう。どのようにデバイスの接続を知ることができますか?最後にあなたは "mSerialPort-> write(" Some command ");"どのように実装?私はコードとコマンドを1つずつ書きましたか? – kararara
接続を押すと、デバイスとの接続が開始され、シリアルポートからデータを読み取ろうとしています。デバイスからデータが放出されない場合、何も表示されません。デバイスが接続されているかどうかを確認するには、isOpen()(mSerialPort-> isOpen())を呼び出します。 –
デバイスにデータを送信するには、新しいボタンを作成します。たとえば、sendを入力します。スロットは無効になります。MainWindow :: on_pushButton_send_clicked(){mSerialPort-> write( "Some command");} –