我是 C++ 和 Qt 的新手。我想在收到字符串后将串行端口中收到的值保存在一个数组中:“数据”。我正在使用终端示例,因此串行端口可以正常工作。
The read function in the Example is the same:
void MainWindow::readData()
{
QByteArray data = serial->readAll();
console->putData(data);
}
我该如何修改它?谢谢!!!
我是 C++ 和 Qt 的新手。我想在收到字符串后将串行端口中收到的值保存在一个数组中:“数据”。我正在使用终端示例,因此串行端口可以正常工作。
The read function in the Example is the same:
void MainWindow::readData()
{
QByteArray data = serial->readAll();
console->putData(data);
}
我该如何修改它?谢谢!!!
如果您手动发送数据,我建议您最好添加帧开始分隔符和帧结束分隔符和校验和。
QByteArray packet_storage;
只需在您声明序列的地方声明它。
StartOfMessage and EndOfMessage
将取决于您的设备。不知道你传的是什么。希望您可以从设备的文档中找出您发送的内容。
至于我,我正在使用
enum Constants
{
StartOfMessage = '\x02', /* Value of byte that marks the start of a message */
EndOfMessage = '\x03', /* Value of byte that marks the end of a message */
CarridgeReturn = '\x0D', /* Carridge return is first byte of end of line */
LineFeed = '\x0A', /* Line feed is second byte of end of line */
NullChar = '\0' /* Null Character */
};
void MainWindow::readData()
{
// read all
QByteArray data = serial->readAll();
// store all read data packet_storage is a QByteArray
packet_storage.append(data);
int start_index = 0;
int end_index = 0;
// process packet if not empty
if(!packet_storage.isEmpty())
{
if( packet_storage.contains(StartOfMessage) && packet_storage.contains(EndOfMessage))
{
start_index = packet_storage.indexOf(StartOfMessage,0);
end_index = packet_storage.indexOf(EndOfMessage,0);
int length = 0;
for (int i=start_index; i <= end_index; i++)
{
length++;
}
// get data
QByteArray dt = packet_storage.mid(start_index,length);
// do your processing here.
// store in vector write to file etc.
processpacket(dt);
packet_storage.remove(start_index,dt.size());
}
}
}