У меня есть функция, которая отправляет данные через RS-232 в Hyperterminal. Функция корректно работает вне цикла while, однако в цикле while она отправляет только в первый раз, после чего ничего не отправляет.
qDebug() << MESSAGE;
int choice;
std::cin >> choice;
while( choice != 3 )
{
switch (choice)
{
case 1:
// Ready to send data
port->write("QSerial Port!\r\n");
break;
case 2:
qDebug() << "Todo...";
break;
case 3:
break;
default:
qDebug() << "Invalid Choice ...";
}
qDebug() << MESSAGE;
std::cin >> choice;
}
Редактировать:
#include <QCoreApplication>
#include <iostream>
#include <QDebug>
#include <QSerialPort>
const char MESSAGE[] = "\n----- New Menu ----"
"\n1- Send Data \n"
"2- Receive Data \n"
"3- Quit: \n";
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
QSerialPort *port = new QSerialPort;
port->setPortName("COM4");
// Check the validity of the port
if ( !port->open(QIODevice::ReadWrite) )
{
qDebug() << "\nError: " << port->portName() << " port can't be opened ...";
return -1;
}else{
qDebug() << '\n' << port->portName() << " port has been opened successfully ...";
port->setBaudRate(QSerialPort::Baud9600);
port->setStopBits(QSerialPort::OneStop);
port->setDataBits(QSerialPort::Data8);
port->setParity(QSerialPort::NoParity);
port->setFlowControl(QSerialPort::NoFlowControl);
qDebug() << port->portName() << " port has been configured correctly ...";
}
qDebug() << MESSAGE;
int choice;
std::cin >> choice;
while( choice != 3 )
{
switch (choice)
{
case 1:
{
// Ready to send data
if ( port->write("QSerial Port!\r\n", qstrlen("QSerial Port!\r\n")) == -1)
{
qDebug() << port->errorString();
}
//port->bytesWritten(strlen("QSerial Port!\r\n"));
port->waitForBytesWritten(-1);
//qDebug() << port->errorString();
}
break;
case 2:
qDebug() << "Todo...";
break;
case 3:
break;
default:
qDebug() << "Invalid Choice ...";
}
qDebug() << MESSAGE;
std::cin >> choice;
}
qDebug() << "\n Goodbye ....";
port->close();
delete port;
return app.exec();
}
port->errorString()
. Также, пожалуйста, покажите, как вы настраиваете объект qtserialport, как вы его открываете. Вы используете QtSerialPort 5.2.1, верно? - person lpapp   schedule 17.03.2014port->clear()
. Единственная проблема сейчас в том, что каждый раз, когда я отправляюQ
, я получаюQQ
. Почему я получаю двойные данные? - person CroCo   schedule 17.03.2014