Utilisation de valeurs lues sur le port série (QextSerialPort)
Bonjour tous le monde,
Je suis débutant en C++ avec Qt Creator et j'ai entrepris d'utiliser la librairie QextSerialPort pour lire les données de capteurs envoyés sur le port COM. J'arrive bien à obtenir les valeurs sur la console en utilisant la classe PortListener et j'aimerai pouvoir les utiliser pour faire des opération dessus ou les afficher sur une interface. Seulement je ne sais pas comment faire en sorte que la classe me retourne une variable dans le main qui corresponde au valeurs affichées en debug.
J'imagine qu'il faut que je créer une fonction membre qui prenne une variable et le nom du port en arguments et retourne la variable qui contient les données ? On m'a parlé de la notion de service pour résoudre ce problème mais je n'en connais pas grand chose, peut-être que quelqu'un peut m'éclairer ?
La classe PortListener ressemble à ça, elle est donnée dans les exemples de la bibliothèque QextSerialPort :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| PortListener::PortListener(const QString &portName)
{
qDebug() << "hi there";
this->port = new QextSerialPort(portName, QextSerialPort::EventDriven);
port->setBaudRate(BAUD9600);
port->setFlowControl(FLOW_OFF);
port->setParity(PAR_NONE);
port->setDataBits(DATA_8);
port->setStopBits(STOP_2);
if (port->open(QIODevice::ReadWrite) == true) {
connect(port, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
connect(port, SIGNAL(dsrChanged(bool)), this, SLOT(onDsrChanged(bool)));
if (!(port->lineStatus() & LS_DSR))
qDebug() << "warning: device is not turned on";
qDebug() << "listening for data on" << port->portName();
}
else {
qDebug() << "device failed to open:" << port->errorString();
}
}
void PortListener::onReadyRead()
{
QByteArray bytes;
int a = port->bytesAvailable();
bytes.resize(a);
port->read(bytes.data(), bytes.size());
qDebug() << "bytes read:" << bytes.size();
qDebug() << "bytes:" << bytes;
} |
Je l'appelle dans le main avec une ligne PortListener listener(portName); Et en message de debug j'ai les valeurs contenues dans "bytes" auxquelles je voudrai accéder dans mon main dans une variable "sensor_value" par exemple. Les valeurs ressemblent à "123.18" ou "25.34"...