经过前几篇帖子的铺垫,算是基本完成了本次试用,使用编写血压测试仪的qt应用程序,可以控制血压测试仪进行血压测量和结果处理,最终在应用程序上显示出来。先来看看我的qt小应用。
这款血压测试仪,其实主要功能是用来测试血管老化程度的(AVI、API等几个指标),但是按照血压仪哪的注册证(也是够坑)。设备本身可以有一条u***接口,使用我们的
开发板作为u***host与血压仪连接,血压仪的u***是一个虚拟串口设备,插在板子上就可以识别!!!、
可以看到被识别为ttyACM0,也就是我上图界面中显示出来的。
其实程序开发起来还是很简单的,主要是通过本次使用熟悉了一下imx平台的开发流程和如何使用yocto进行文件系统构建。
这里还是要贴一下主函数:
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- foreach (const QSerialPortinfo &info, QSerialPortInfo::availablePorts()) {
- QSerialPort serial;
- serial.setPort(info);
- if (serial.open(QIODevice::ReadWrite))
- {
- ui->PortBox->addItem(serial.portName());
- serial.close();
- }
- }
- for(int index = 0; index < 100; index ++)
- {
- ui->AgeBox->addItem(QString::number(index));
- }
- ui->label_High->clear();
- ui->label_Low->clear();
- ui->label_API->clear();
- ui->label_AVI->clear();
- ui->label_CAPP->clear();
- ui->label_CSBP->clear();
- ui->label_heart->clear();
- ui->DataBox->setCurrentIndex(1);
- ui->AgeBox->setEnabled(false);
- ui->SexBox->setEnabled(false);
- ui->SendButton->setEnabled(false);
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- void MainWindow::on_openButton_clicked()
- {
- qDebug("on_pushButton_clicked");
- if(ui->openButton->text()==tr("OPEN"))
- {
- qDebug("打开串口");
- serial = new QSerialPort;
- serial->setPortName(ui->PortBox->currentText());
- serial->open((QIODevice::ReadWrite));
- serial->setBaudRate(ui->BaudBox->currentText().toInt());
- qDebug()<<"波特率"<BaudBox->currentText().toInt();
- switch(ui->DataBox->currentIndex())
- {
- case 0:
- serial->setDataBits(QSerialPort::Data7);
- qDebug("数据位7");
- break;
- case 1:
- serial->setDataBits(QSerialPort::Data8);
- serial->setDataBits(QSerialPort::Data7);
- qDebug("数据位8");
- break;
- }
- switch(ui->ParityBox->currentIndex())
- {
- case 0:
- serial->setParity(QSerialPort::NoParity);
- qDebug()<< "校验位" << ui->ParityBox->currentText();
- break;
- case 1:
- serial->setParity(QSerialPort::EvenParity);
- qDebug()<< "校验位" << ui->ParityBox->currentText();
- break;
- case 2:
- serial->setParity(QSerialPort::OddParity);
- qDebug()<< "校验位" << ui->ParityBox->currentText();
- break;
- }
- switch(ui->StopBox->currentIndex())
- {
- case 0:
- serial->setStopBits(QSerialPort::OneStop);
- break;
- case 1:
- serial->setStopBits(QSerialPort::TwoStop);
- break;
- }
- serial->setFlowControl(QSerialPort::NoFlowControl);
- ui->PortBox->setEnabled(false);
- ui->BaudBox->setEnabled(false);
- ui->DataBox->setEnabled(false);
- ui->ParityBox->setEnabled(false);
- ui->StopBox->setEnabled(false);
- ui->AgeBox->setEnabled(true);
- ui->SexBox->setEnabled(true);
- ui->SendButton->setEnabled(true);
- ui->openButton->setText("CLOSE");
- QObject::connect(serial, &QSerialPort::readyRead, this, &MainWindow::Read_Data);
- }
- else
- {
- serial->clear();
- serial->close();
- serial->deleteLater();
- ui->PortBox->setEnabled(true);
- ui->BaudBox->setEnabled(true);
- ui->DataBox->setEnabled(true);
- ui->ParityBox->setEnabled(true);
- ui->StopBox->setEnabled(true);
- ui->SendButton->setEnabled(false);
- ui->AgeBox->setEnabled(false);
- ui->SexBox->setEnabled(false);
- ui->SendButton->setEnabled(false);
- ui->openButton->setText("OPEN");
- }
- }
- void MainWindow::on_SendButton_clicked()
- {
- qDebug()<<"send";
- unsigned char data[9]={0x40 ,0x52 ,0x05 ,0x00 ,0xFF ,0x00 ,0x20 ,0x01 ,0x00};
- data[6] = ui->AgeBox->currentIndex();
- data[7] = ui->SexBox->currentIndex() + 1;
- for (int i = 0; i < 8; i++)
- {
- data[8] += data[i];
- qDebug()<
- }
- serial->write((char *)data,9);
- ui->AgeBox->setEnabled(false);
- ui->SexBox->setEnabled(false);
- ui->SendButton->setEnabled(false);
- }
- void MainWindow::Read_Data()
- {
- QByteArray buf;
- buf = serial->readAll();
- if(!buf.isEmpty())
- {
- if((int)buf[1] == 0x54)
- {
- qDebug()<<"测试完成"<
- ui->label_High->setText(QString::number((unsigned char)buf[6]));
- ui->label_Low->setText(QString::number((unsigned char)buf[8]));
- ui->label_heart->setText(QString::number((unsigned char)buf[10]));
- ui->label_AVI->setText(QString::number(((unsigned char)buf[12] + (unsigned char)buf[13] * 256) / 10.0));
- ui->label_API->setText(QString::number(((unsigned char)buf[14] + (unsigned char)buf[15] * 256) / 10.0));
- ui->label_CSBP->setText(QString::number(((unsigned char)buf[16] + (unsigned char)buf[17] * 256) / 257));
- ui->label_CAPP->setText(QString::number(((unsigned char)buf[18] + (unsigned char)buf[19] * 256) / 257));
- ui->AgeBox->setEnabled(true);
- ui->SexBox->setEnabled(true);
- ui->SendButton->setEnabled(true);
- }
- }
- buf.clear();
- }
这次使用前前后后总共花了2个月时间,也学习到了很多东西,接下来打算加上更多的功能,把测试数据上传到公司服务器上。