Hi, ich würde gerne Daten von einem µC(bzw einer USB-Bridge) in einem Qt-Programm verarbeiten; bis jetzt habe ich immer hTerm genutzt. Nach etwas googeln bin ich dann auf QextSerialPort gestoßen und habs mal ausprobiert. Allerdings läuft es nicht und ich weiß auch nicht warum . Zum Test hab ich den TXD-Pin der Bridge auf den RXD-Pin gelegt, nun sollte alles was gesendet wird wieder zurück kommen... Es passiert aber nichts. Meine Vermutung: die Verbindung zur Bridge schlägt fehl, da die SLOT-Methode onDataAvailable() nicht aufgerufen wird (port sendet nicht readyRead()) Hier mal mein Beispiel-Code: ///mainwindow.cpp
1 | #include "mainwindow.h" |
2 | #include "ui_mainwindow.h" |
3 | |
4 | MainWindow::MainWindow(QWidget *parent) : |
5 | QMainWindow(parent), |
6 | ui(new Ui::MainWindow) |
7 | { |
8 | ui->setupUi(this); |
9 | this->setFixedSize(1200,650); |
10 | port = new QextSerialPort("COM18", QextSerialPort::EventDriven); |
11 | port->setPortName("COM18"); /// habe ich aus hTerm übernommen; da war mein Gerät immer "COM18" |
12 | port->setQueryMode(QextSerialPort::EventDriven); |
13 | connect(port, SIGNAL(readyRead()), this, SLOT(onDataAvailable())); |
14 | connect(this, SIGNAL(output(QList<int>)), this, SLOT(onOutput(QList<int>))); |
15 | port->open(QIODevice::ReadWrite | QIODevice::Unbuffered); |
16 | port->setBaudRate(BAUD9600); |
17 | port->setFlowControl(FLOW_OFF); |
18 | port->setParity(PAR_NONE); |
19 | port->setDataBits(DATA_8); |
20 | port->setStopBits(STOP_1); |
21 | text = new QTextBrowser(this); |
22 | text->resize(width(), height()); |
23 | sendData(); |
24 | } |
25 | |
26 | void MainWindow::onDataAvialable() |
27 | { |
28 | QByteArray result = port->readAll(); |
29 | uchar tmp = 0; |
30 | |
31 | QList<int> data; |
32 | |
33 | for(int i = 0; i < result.size(); ++i) |
34 | { |
35 | const uchar val = result.at(i); |
36 | if(i % 2 == 0) |
37 | { |
38 | tmp = val; |
39 | } |
40 | else |
41 | { |
42 | data << (tmp + val); |
43 | } |
44 | } |
45 | output(data); |
46 | } |
47 | |
48 | void MainWindow::sendData() |
49 | { |
50 | QMutex m; |
51 | m.lock(); |
52 | port->flush(); |
53 | const char tmp = 255; |
54 | int i = port->write((const char*) &tmp, 1); |
55 | m.unlock(); |
56 | } |
57 | |
58 | void MainWindow::onOutput(QList<int> src) |
59 | { |
60 | for(int i=0;i<src.size();++i) |
61 | { |
62 | QString num; |
63 | num.setNum(src.at(i)); |
64 | str.append(num); |
65 | str.append("\n"); |
66 | } |
67 | text->setText(str); |
68 | } |
69 | |
70 | MainWindow::~MainWindow() |
71 | { |
72 | delete ui; |
73 | } |
MainWindow.h
1 | #ifndef MAINWINDOW_H |
2 | #define MAINWINDOW_H |
3 | |
4 | #include <QMainWindow> |
5 | #include "qextserialport.h" |
6 | #include <QMutex> |
7 | #include <QLabel> |
8 | #include <QTextBrowser> |
9 | #include <QGridLayout> |
10 | |
11 | namespace Ui { |
12 | class MainWindow; |
13 | } |
14 | |
15 | class MainWindow : public QMainWindow |
16 | { |
17 | Q_OBJECT |
18 | |
19 | public: |
20 | explicit MainWindow(QWidget *parent = 0); |
21 | ~MainWindow(); |
22 | void sendData(); |
23 | signals: |
24 | void output(QList<int> str); |
25 | public slots: |
26 | void onDataAvialable( ); |
27 | void onOutput(QList<int> str); |
28 | private: |
29 | QTextBrowser *text; |
30 | Ui::MainWindow *ui; |
31 | QextSerialPort *port; |
32 | QString str; |
33 | }; |
34 | |
35 | #endif // MAINWINDOW_H |