gpt4 book ai didi

c++ - Qt QSerialPort 缓冲

转载 作者:太空狗 更新时间:2023-10-29 21:01:38 25 4
gpt4 key购买 nike

我正在从串行端口读取信息。如何等待换行符进来,然后处理数据?也就是说,我如何确保一次分块整行。

此代码不起作用:

void MainWindow::readData()
{
QByteArray data = serial->readAll(); //reads in one character at a time (or maybe more)
console->putData(data);
charBuffer.append(data);
if (data.contains("\n")) //read into a structure until newline received.
{
//call parsedata
sensorValues->parseData(charBuffer); //send the data to be parsed.
//empty out the structure
charBuffer = "";
}
}

假设串口发送“Sensor1 200\n”。
数据可能包含以下内容:“Se”,然后是“n”,“sor 2”,“00\n”等等。

如何在我有一行文本之前阻止调用 parseData?

附加信息:
readData 被设置为一个插槽:

    connect(serial, SIGNAL(readyRead()), this, SLOT(readData()));

最佳答案

您没有尝试过使用 SerialPort readLine() 函数吗?在每个 readline() 之后,您可以将该行发送到某个新的 ByteArray 或 QString 以进行解析。我还在最后使用 .trimmed() 来删除 '\r' 和 '\n' 字符,所以我可以这样做:

void MainWindow::readData()
{
while (serial->canReadLine()){
QByteArray data = serial->readLine(); //reads in data line by line, separated by \n or \r characters
parseBytes(data.trimmed()) ;
}
}

void MainWindow::parseBytes(const QByteArray &data) <--which needs to be moved to separate class, but here it's in the MainWindow, obviously improper
{
if (data.contains("1b0:"))
{
channel1Data.b0_code = data.mid(5); // which equals "1",
//do stuff or feed channel1Data.b0_code to a control
}
}

关于c++ - Qt QSerialPort 缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17703605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com