QSerialPort *serial;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
serial = new QSerialPort(this);
serial->setPortName("/dev/ttyUSB0");
serial->setBaudRate(QSerialPort::Baud9600);
serial->setStopBits(QSerialPort::OneStop);
serial->setParity(QSerialPort::NoParity);
serial->setDataBits(QSerialPort::Data8);
serial->setFlowControl(QSerialPort::NoFlowControl);
serial->open(QIODevice::ReadWrite);
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(serialReceived()));
connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(serialSent()));
}
MainWindow::~MainWindow()
{
delete ui;
serial->close();
}
void MainWindow::serialReceived()
{
ui->label->setText(serial->readAll());
}
void MainWindow::serialSent()
{
QByteArray bytes;
serial->write(bytes);
}
Из этого кода я запускаю qt на Ubuntu. Это показывает, что QIOdevice :: write устройство не открыто. Но я уже подключил свой USB к последовательному порту на этом порту, как я могу решить эту проблему.
1) В Ubuntu для доступа к последовательному порту у вас должны быть соответствующие разрешения. Попробуйте запустить свой код с помощью команды sudo.
2) Различные настройки для последовательного порта должны быть выполнены после того, как этот порт был открыт, измените свой код следующим образом:
serial->setPortName("/dev/ttyUSB0");
if(serial->open(QIODevice::ReadWrite){
serial->setBaudRate(QSerialPort::Baud9600);
serial->setStopBits(QSerialPort::OneStop);
serial->setParity(QSerialPort::NoParity);
serial->setDataBits(QSerialPort::Data8);
serial->setFlowControl(QSerialPort::NoFlowControl);
}
Каждые настройки могут возвращать true или false. Правильный путь это проверить всех!