使用QSerialPort从arduino读取时遇到麻烦。我向arduino发送了一个非零的字符以开始发送字节,但我收到了垃圾。我认为那是因为我读错了。数据由标头的两个字节,长度的一个字节,日期,温度和距离的字节组成。我想知道我的编程是否很好。对不起,我的英语,谢谢。
void DecoSerialPort::startSerialPort()
{
foreach(const QSerialPortInfo &serialPortInfo, QSerialPortInfo::availablePorts())
{
if(serialPortInfo.hasVendorIdentifier() && serialPortInfo.hasProductIdentifier())
{
if(serialPortInfo.vendorIdentifier() == arduino_uno_vendor_id)
{
if(serialPortInfo.productIdentifier() == arduino_uno_product_id)
{
arduino_port_name = serialPortInfo.portName();
arduino_is_available = true;
}
}
}
}
if(arduino_is_available)
{
// open and configure the serialport
arduino->setPortName(arduino_port_name);
if(!arduino->open(QIODevice::ReadWrite))
qDebug() << arduino->errorString();
arduino->setBaudRate(QSerialPort::Baud9600);
arduino->setDataBits(QSerialPort::Data8);
arduino->setParity(QSerialPort::NoParity);
arduino->setStopBits(QSerialPort::OneStop);
arduino->setFlowControl(QSerialPort::NoFlowControl);
}else
{
// give error message if not available
QMessageBox::warning(this, "Port error", "Couldn't find the Arduino!");
}
}
void DecoSerialPort::getTrama(Temperatura &temp, Distancia &dist)
{
char *data = nullptr;
startSerialPort();
data = new char[2];
if(arduino->isReadable())
{
arduino->read(data,2);
while(headerH != *data)arduino->read(data,2);
if (headerL == *(data+1))
{
arduino->read(data,1);
length = *data;
data = new char[length];
arduino->read(data,length);
temp.setFecha(data);
temp.setValue (data + 12);
dist.setFecha(data);
dist.setValue (data + 4);
}
}
delete [] data;
}