需要采集一个力矩传感器的数据,用一个定时器来定时发送命令并接受返回的数据,返回的十六进制数据截取数据区域,并转换为QString后再转换为10进制数。
//头文件定义
private:
//采样定时器
QTimer* askTimer;
QTimer* textTimer;
private slots:
//定时采样函数
void sensorTimeoutHandle();
void textTimeoutHandle();
//cpp文件初始化定义
askTimer = new QTimer(this);
connect(askTimer, SIGNAL(timeout()), this, SLOT(sensorTimeoutHandle()));
textTimer = new QTimer(this);
connect(textTimer, SIGNAL(timeout()), this, SLOT(textTimeoutHandle()));
//采样函数
//力矩采样函数
void BGDTextSoftware::sensorTimeoutHandle() {
serialSensor.write(sensorAsk,8);
sleep(10);
if (serialSensor.bytesAvailable() >= 8) {
QByteArray input = serialSensor.readAll();
QByteArray data = input.mid(5, 2);
QString tempStr = QString(data.toHex());
bool ok;
int datadec = tempStr.toInt(&ok, 16);
if (datadec > 10000) {//如果超量程即为反向力矩
datadec = -(65536 - datadec);
}
double torque = double(datadec) / 10;
ui.tmp->clear();
ui.tmp->setText(data.toHex());
ui.torqueLcdNumber->display(QString::number(torque, '.', 1));
}
}