问答
直播中

h1654155956.6842

8年用户 151经验值
擅长:182874
私信 关注

【MYS-6ULX-IOT试用体验】血压仪qt应用程序【结项贴】

经过前几篇帖子的铺垫,算是基本完成了本次试用,使用编写血压测试仪的qt应用程序,可以控制血压测试仪进行血压测量和结果处理,最终在应用程序上显示出来。先来看看我的qt小应用。
微信截图_20170721133801.png

这款血压测试仪,其实主要功能是用来测试血管老化程度的(AVI、API等几个指标),但是按照血压仪哪的注册证(也是够坑)。设备本身可以有一条u***接口,使用我们的开发板作为u***host与血压仪连接,血压仪的u***是一个虚拟串口设备,插在板子上就可以识别!!!、
微信截图_20170721134612.png
可以看到被识别为ttyACM0,也就是我上图界面中显示出来的。
其实程序开发起来还是很简单的,主要是通过本次使用熟悉了一下imx平台的开发流程和如何使用yocto进行文件系统构建。
这里还是要贴一下主函数:
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"

  3. MainWindow::MainWindow(QWidget *parent) :
  4. QMainWindow(parent),
  5. ui(new Ui::MainWindow)
  6. {
  7. ui->setupUi(this);

  8. foreach (const QSerialPortinfo &info, QSerialPortInfo::availablePorts()) {
  9. QSerialPort serial;
  10. serial.setPort(info);
  11. if (serial.open(QIODevice::ReadWrite))
  12. {
  13. ui->PortBox->addItem(serial.portName());
  14. serial.close();
  15. }
  16. }
  17. for(int index = 0; index < 100; index ++)
  18. {
  19. ui->AgeBox->addItem(QString::number(index));
  20. }
  21. ui->label_High->clear();
  22. ui->label_Low->clear();
  23. ui->label_API->clear();
  24. ui->label_AVI->clear();
  25. ui->label_CAPP->clear();
  26. ui->label_CSBP->clear();
  27. ui->label_heart->clear();
  28. ui->DataBox->setCurrentIndex(1);
  29. ui->AgeBox->setEnabled(false);
  30. ui->SexBox->setEnabled(false);
  31. ui->SendButton->setEnabled(false);
  32. }

  33. MainWindow::~MainWindow()
  34. {
  35. delete ui;
  36. }

  37. void MainWindow::on_openButton_clicked()
  38. {
  39. qDebug("on_pushButton_clicked");
  40. if(ui->openButton->text()==tr("OPEN"))
  41. {
  42. qDebug("打开串口");
  43. serial = new QSerialPort;

  44. serial->setPortName(ui->PortBox->currentText());

  45. serial->open((QIODevice::ReadWrite));

  46. serial->setBaudRate(ui->BaudBox->currentText().toInt());
  47. qDebug()<<"波特率"<BaudBox->currentText().toInt();
  48. switch(ui->DataBox->currentIndex())
  49. {
  50. case 0:
  51. serial->setDataBits(QSerialPort::Data7);
  52. qDebug("数据位7");
  53. break;
  54. case 1:
  55. serial->setDataBits(QSerialPort::Data8);
  56. serial->setDataBits(QSerialPort::Data7);
  57. qDebug("数据位8");
  58. break;
  59. }

  60. switch(ui->ParityBox->currentIndex())
  61. {
  62. case 0:
  63. serial->setParity(QSerialPort::NoParity);
  64. qDebug()<< "校验位" << ui->ParityBox->currentText();
  65. break;
  66. case 1:
  67. serial->setParity(QSerialPort::EvenParity);
  68. qDebug()<< "校验位" << ui->ParityBox->currentText();
  69. break;
  70. case 2:
  71. serial->setParity(QSerialPort::OddParity);
  72. qDebug()<< "校验位" << ui->ParityBox->currentText();
  73. break;
  74. }

  75. switch(ui->StopBox->currentIndex())
  76. {
  77. case 0:
  78. serial->setStopBits(QSerialPort::OneStop);
  79. break;
  80. case 1:
  81. serial->setStopBits(QSerialPort::TwoStop);
  82. break;
  83. }
  84. serial->setFlowControl(QSerialPort::NoFlowControl);

  85. ui->PortBox->setEnabled(false);
  86. ui->BaudBox->setEnabled(false);
  87. ui->DataBox->setEnabled(false);
  88. ui->ParityBox->setEnabled(false);
  89. ui->StopBox->setEnabled(false);
  90. ui->AgeBox->setEnabled(true);
  91. ui->SexBox->setEnabled(true);
  92. ui->SendButton->setEnabled(true);
  93. ui->openButton->setText("CLOSE");

  94. QObject::connect(serial, &QSerialPort::readyRead, this, &MainWindow::Read_Data);
  95. }
  96. else
  97. {
  98. serial->clear();
  99. serial->close();
  100. serial->deleteLater();
  101. ui->PortBox->setEnabled(true);
  102. ui->BaudBox->setEnabled(true);
  103. ui->DataBox->setEnabled(true);
  104. ui->ParityBox->setEnabled(true);
  105. ui->StopBox->setEnabled(true);
  106. ui->SendButton->setEnabled(false);
  107. ui->AgeBox->setEnabled(false);
  108. ui->SexBox->setEnabled(false);
  109. ui->SendButton->setEnabled(false);
  110. ui->openButton->setText("OPEN");
  111. }
  112. }

  113. void MainWindow::on_SendButton_clicked()
  114. {
  115. qDebug()<<"send";
  116. unsigned char data[9]={0x40 ,0x52 ,0x05 ,0x00 ,0xFF ,0x00 ,0x20 ,0x01 ,0x00};

  117. data[6] = ui->AgeBox->currentIndex();
  118. data[7] = ui->SexBox->currentIndex() + 1;
  119. for (int i = 0; i < 8; i++)
  120. {
  121. data[8] += data[i];
  122. qDebug()<
  123. }
  124. serial->write((char *)data,9);
  125. ui->AgeBox->setEnabled(false);
  126. ui->SexBox->setEnabled(false);
  127. ui->SendButton->setEnabled(false);
  128. }

  129. void MainWindow::Read_Data()
  130. {
  131. QByteArray buf;
  132. buf = serial->readAll();
  133. if(!buf.isEmpty())
  134. {
  135. if((int)buf[1] == 0x54)
  136. {
  137. qDebug()<<"测试完成"<
  138. ui->label_High->setText(QString::number((unsigned char)buf[6]));
  139. ui->label_Low->setText(QString::number((unsigned char)buf[8]));
  140. ui->label_heart->setText(QString::number((unsigned char)buf[10]));
  141. ui->label_AVI->setText(QString::number(((unsigned char)buf[12] + (unsigned char)buf[13] * 256) / 10.0));
  142. ui->label_API->setText(QString::number(((unsigned char)buf[14] + (unsigned char)buf[15] * 256) / 10.0));
  143. ui->label_CSBP->setText(QString::number(((unsigned char)buf[16] + (unsigned char)buf[17] * 256) / 257));
  144. ui->label_CAPP->setText(QString::number(((unsigned char)buf[18] + (unsigned char)buf[19] * 256) / 257));
  145. ui->AgeBox->setEnabled(true);
  146. ui->SexBox->setEnabled(true);
  147. ui->SendButton->setEnabled(true);
  148. }
  149. }
  150. buf.clear();
  151. }
这次使用前前后后总共花了2个月时间,也学习到了很多东西,接下来打算加上更多的功能,把测试数据上传到公司服务器上。

回帖(1)

李光

2018-7-10 15:10:29
不错不错不错不错不错
举报

更多回帖

发帖
×
20
完善资料,
赚取积分