所以我确实让它起作用了,但是它非常慢。我没有使用Qt库的经验,很少使用串行通信和c++,所以我确信我的方法效率极低。
设置:我正在为我的车的数字仪表板工作,ECU可以通过串行连接发送实时引擎参数。
下面是我现在的代码的一部分,它正在工作,但是非常慢,从我重新启动引擎时到看到值指示更改,这就像一个5-10秒的延迟。
QObject::connect(ser, &QSerialPort::readyRead, [&]
{
if ((m_userName == "4") and (ser->bytesAvailable()))
{
QByteArray incomingByte = ser->read(1).toHex();
if (incomingByte == "ff")
{
dataBuff = "";
}
dataBuff += incomingByte;
//converting the incoming data once all 4 bytes are received
if (dataBuff.length() == 8)
{
QString revLsb = tr(dataBuff.mid(6, 2));
QString revMsb = tr(dataBuff.mid(4, 2));
bool bStatus1 = false;
bool bStatus2 = false;
uint nHexLsb = revLsb.toUInt(&bStatus1,16);
uint nHexMsb = revMsb.toUInt(&bStatus2,16);
float revlsb = nHexLsb * 12.5 * 256.0;
float rev = nHexMsb * 12.5 + revlsb;
if ((rev != 0) & (rev != 12.5))
{
rev = rev / 1000;
qDebug() << "Revs: " << rev << " rpm";
m_rpmVal = rev;
emit rpmValChanged();
}
}
}
});我使用QObject::connect是因为我在某个地方看到“//这是在发出readyRead()时调用的”
我应该使用什么和在哪里更有效地读取传入字节?
发布于 2021-11-01 21:32:46
connect(&activeport, &QSerialPort::readyRead, this, &appmain::handledata);
connect(&yourport, &QSerialPort::readyRead, this, &functionpointer);您需要创建一个函数并将它作为一个参数传递给connect()
https://stackoverflow.com/questions/68246759
复制相似问题