RS-232 経由でハイパーターミナルにデータを送信する機能があります。この関数は while ループの外では適切に機能しますが、while ループでは最初の 1 回だけ送信し、その後は何も送信しません。
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();
}