整理了event的响应代码,串口收发测试结果显示是合理的。
This commit is contained in:
parent
627c12e37e
commit
50f564aa21
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@ -12,7 +12,7 @@
|
|||||||
"idf.openOcdConfigs": [
|
"idf.openOcdConfigs": [
|
||||||
"board/esp32s3-builtin.cfg"
|
"board/esp32s3-builtin.cfg"
|
||||||
],
|
],
|
||||||
"idf.portWin": "COM6",
|
"idf.portWin": "COM5",
|
||||||
"idf.flashType": "UART",
|
"idf.flashType": "UART",
|
||||||
"files.associations": {
|
"files.associations": {
|
||||||
"*.md": "markdown",
|
"*.md": "markdown",
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Binary file not shown.
@ -42,6 +42,7 @@ fonts/ui_font_symbolsalibaba.c
|
|||||||
ui_event_wifi.c
|
ui_event_wifi.c
|
||||||
ui_event_debug.c
|
ui_event_debug.c
|
||||||
ui_event_light.c
|
ui_event_light.c
|
||||||
|
ui_event_homePage.c
|
||||||
)
|
)
|
||||||
|
|
||||||
idf_component_register(SRCS ${SOURCES}
|
idf_component_register(SRCS ${SOURCES}
|
||||||
|
|||||||
402
components/FluxUI/ui_event_homePage.c
Normal file
402
components/FluxUI/ui_event_homePage.c
Normal file
@ -0,0 +1,402 @@
|
|||||||
|
/**
|
||||||
|
* @file ui_event_homePage.c
|
||||||
|
* @brief 此文件中实现了主页的UI事件处理函数
|
||||||
|
*
|
||||||
|
* 核心逻辑:1.处理标准变更事件;2.处理测试指令下发事件
|
||||||
|
*
|
||||||
|
* @author wang xiang en
|
||||||
|
* @date 2025-04-19
|
||||||
|
* @version 版本号
|
||||||
|
* @copyright 版权声明((C)2025, YUWELL MEDTECH Co.ltd)
|
||||||
|
*/
|
||||||
|
#include "ui.h"
|
||||||
|
#include "FluxProtocol.h"
|
||||||
|
/* 使用定时器 */
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
/* 声明需要调用的静态函数 */
|
||||||
|
static void comulate_time_set(void);
|
||||||
|
|
||||||
|
/* 更新当前标准体积数据 */
|
||||||
|
static void standard_volume_refresh(void);
|
||||||
|
|
||||||
|
/* 定时器执行函数声明 */
|
||||||
|
static void comulate_result_read(lv_timer_t * timer);
|
||||||
|
|
||||||
|
/************************************ 呼吸频率更改响应函数 start ******************************************* */
|
||||||
|
/**
|
||||||
|
* @brief 呼吸频率减操作
|
||||||
|
*
|
||||||
|
* 只对Spinbox进行-5,协议发送在Spinbox的值更改响应事件中。
|
||||||
|
*
|
||||||
|
* @param[in] e not used
|
||||||
|
*/
|
||||||
|
void on_buttonRateMinus_clicked(lv_event_t * e)
|
||||||
|
{
|
||||||
|
uint16_t value = lv_spinbox_get_value(ui_pageHome_spinboxRate);
|
||||||
|
lv_spinbox_set_value(ui_pageHome_spinboxRate,value-5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 呼吸频率加操作
|
||||||
|
*
|
||||||
|
* 只对Spinbox进行+5,协议发送在Spinbox的值更改响应事件中。
|
||||||
|
*
|
||||||
|
* @param[in] e not used
|
||||||
|
*/
|
||||||
|
void on_buttonRatePlus_clicked(lv_event_t * e)
|
||||||
|
{
|
||||||
|
uint16_t value = lv_spinbox_get_value(ui_pageHome_spinboxRate);
|
||||||
|
lv_spinbox_set_value(ui_pageHome_spinboxRate,value+5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 呼吸频率值改变响应事件,向流量计下发累时。
|
||||||
|
*
|
||||||
|
* 通过485协议下发命令,实现流量计的累时。
|
||||||
|
* 使用0x06指令,只修改单个16bit寄存器
|
||||||
|
*
|
||||||
|
* @note 协议格式:
|
||||||
|
* 例如:01 06 00 02 41 F0 18 1E
|
||||||
|
*
|
||||||
|
* 意思是:
|
||||||
|
* 01:设备地址
|
||||||
|
* 06:功能码,修改单个寄存器
|
||||||
|
* 00 02:寄存器地址,0x00 02
|
||||||
|
* 41 F0:需要发送的数据 41 F0 00 00 对应浮点数 30
|
||||||
|
*
|
||||||
|
* @param[in] e not used
|
||||||
|
*/
|
||||||
|
void on_spinboxRate_valueChanged(lv_event_t * e)
|
||||||
|
{
|
||||||
|
/* 更改下方测试结果部分的频率信息 */
|
||||||
|
FluxMachineData.breathRate = lv_spinbox_get_value(e->target);
|
||||||
|
lv_label_set_text_fmt(ui_pageHome_labelResultRate,"%ld",FluxMachineData.breathRate);
|
||||||
|
|
||||||
|
/* 刷新标准体积数据,频率不同标准体积也不同。 */
|
||||||
|
standard_volume_refresh();
|
||||||
|
|
||||||
|
/* 根据设定的出气次数设定积分时间 */
|
||||||
|
comulate_time_set();
|
||||||
|
|
||||||
|
/* 下发计算好的积分时间*/
|
||||||
|
uint8_t bytes[4];
|
||||||
|
float time = (float)lv_spinbox_get_value(ui_pageFluxRead_spinboxTime);
|
||||||
|
memcpy(bytes, &time, 4);
|
||||||
|
|
||||||
|
/* 下发命令 */
|
||||||
|
flux_frame.ADDR = FLUX_ADDR;
|
||||||
|
|
||||||
|
/* 0x06指令 */
|
||||||
|
flux_frame.FUNC = FLUX_FUNC_SET_SINGLE;
|
||||||
|
|
||||||
|
/* 寄存器地址 0x00 02 */
|
||||||
|
flux_frame.DATA[0] = 0x00;
|
||||||
|
flux_frame.DATA[1] = 0x02;
|
||||||
|
|
||||||
|
/* 只修改时间寄存器(32bit)的前两个字节数据(16bit) */
|
||||||
|
flux_frame.DATA[2] = bytes[3];
|
||||||
|
flux_frame.DATA[3] = bytes[2];
|
||||||
|
|
||||||
|
ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 根据spinbox中的值修改 pageFluxRead 页中的显示积分时间
|
||||||
|
*
|
||||||
|
* @attention 不能在spinboxTime_valueChanged中调用!!
|
||||||
|
* 否则容易造成 死循环。
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static void comulate_time_set(void)
|
||||||
|
{
|
||||||
|
/* 获取当前呼吸频率 */
|
||||||
|
FluxMachineData.breathRate = lv_spinbox_get_value(ui_pageHome_spinboxRate);
|
||||||
|
|
||||||
|
uint16_t currntTimes = lv_dropdown_get_selected(ui_pageFluxRead_dropdownPulseTimes);
|
||||||
|
|
||||||
|
ESP_LOGI("comulateTimeSend","currentTimes:%d",currntTimes);
|
||||||
|
|
||||||
|
if (currntTimes == 0)//进行十次积分
|
||||||
|
{
|
||||||
|
/* 10次脉冲计量 */
|
||||||
|
switch (FluxMachineData.breathRate)
|
||||||
|
{
|
||||||
|
case 15:
|
||||||
|
/*呼吸频率为15BPM时,积分时间设定为40秒*/
|
||||||
|
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,40);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 20:
|
||||||
|
/*呼吸频率为20BPM时,积分时间设定为30秒*/
|
||||||
|
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,30);
|
||||||
|
break;
|
||||||
|
case 25:
|
||||||
|
/*呼吸频率为25BPM时,积分时间设定为24秒*/
|
||||||
|
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,24);
|
||||||
|
break;
|
||||||
|
case 30:
|
||||||
|
/*呼吸频率为30BPM时,积分时间设定为20秒*/
|
||||||
|
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,20);
|
||||||
|
break;
|
||||||
|
case 35:
|
||||||
|
/*呼吸频率为35BPM时,积分时间设定为16秒*/
|
||||||
|
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,18);
|
||||||
|
break;
|
||||||
|
case 40:
|
||||||
|
/*呼吸频率为40BPM时,积分时间设定为15秒*/
|
||||||
|
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,15);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else if (currntTimes == 1)
|
||||||
|
{
|
||||||
|
/* 20次脉冲 */
|
||||||
|
switch (FluxMachineData.breathRate)
|
||||||
|
{
|
||||||
|
case 15:
|
||||||
|
/*呼吸频率为15BPM时,积分时间设定为40秒*/
|
||||||
|
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,80);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 20:
|
||||||
|
/*呼吸频率为20BPM时,积分时间设定为30秒*/
|
||||||
|
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,60);
|
||||||
|
break;
|
||||||
|
case 25:
|
||||||
|
/*呼吸频率为25BPM时,积分时间设定为24秒*/
|
||||||
|
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,48);
|
||||||
|
break;
|
||||||
|
case 30:
|
||||||
|
/*呼吸频率为30BPM时,积分时间设定为20秒*/
|
||||||
|
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,40);
|
||||||
|
break;
|
||||||
|
case 35:
|
||||||
|
/*呼吸频率为35BPM时,积分时间设定为16秒*/
|
||||||
|
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,36);
|
||||||
|
break;
|
||||||
|
case 40:
|
||||||
|
/*呼吸频率为40BPM时,积分时间设定为15秒*/
|
||||||
|
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,30);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else if (currntTimes == 2)
|
||||||
|
{
|
||||||
|
/* 30次脉冲 */
|
||||||
|
switch (FluxMachineData.breathRate)
|
||||||
|
{
|
||||||
|
case 15:
|
||||||
|
/*呼吸频率为15BPM时,积分时间设定为40秒*/
|
||||||
|
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,120);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 20:
|
||||||
|
/*呼吸频率为20BPM时,积分时间设定为30秒*/
|
||||||
|
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,90);
|
||||||
|
break;
|
||||||
|
case 25:
|
||||||
|
/*呼吸频率为25BPM时,积分时间设定为24秒*/
|
||||||
|
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,72);
|
||||||
|
break;
|
||||||
|
case 30:
|
||||||
|
/*呼吸频率为30BPM时,积分时间设定为20秒*/
|
||||||
|
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,60);
|
||||||
|
break;
|
||||||
|
case 35:
|
||||||
|
/*呼吸频率为35BPM时,积分时间设定为16秒*/
|
||||||
|
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,54);
|
||||||
|
break;
|
||||||
|
case 40:
|
||||||
|
/*呼吸频率为40BPM时,积分时间设定为15秒*/
|
||||||
|
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,45);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 更新测试时间
|
||||||
|
*
|
||||||
|
* 修改单次测试脉冲总数10 20 30 次后,更新测试时间,
|
||||||
|
* 向流量计下发测试时间。
|
||||||
|
*
|
||||||
|
* @param[in] e not used
|
||||||
|
*/
|
||||||
|
void on_dropdownPulseTimes_valueChanged(lv_event_t * e)
|
||||||
|
{
|
||||||
|
/* 根据脉冲次数设置测试时间 */
|
||||||
|
comulate_time_set();
|
||||||
|
|
||||||
|
/* 下发测试时间 */
|
||||||
|
uint8_t bytes[4];
|
||||||
|
float time = (float)lv_spinbox_get_value(ui_pageFluxRead_spinboxTime);
|
||||||
|
memcpy(bytes, &time, 4);
|
||||||
|
|
||||||
|
flux_frame.ADDR = FLUX_ADDR;
|
||||||
|
flux_frame.FUNC = FLUX_FUNC_SET_SINGLE;
|
||||||
|
|
||||||
|
flux_frame.DATA[0] = 0x00;
|
||||||
|
flux_frame.DATA[1] = 0x02;
|
||||||
|
flux_frame.DATA[2] = bytes[3];
|
||||||
|
flux_frame.DATA[3] = bytes[2];
|
||||||
|
|
||||||
|
ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************ 呼吸频率更改响应函数 end ******************************************* */
|
||||||
|
|
||||||
|
/************************************ 挡位更改响应函数 start ******************************************* */
|
||||||
|
/**
|
||||||
|
* @brief 挡位切换后的响应事件
|
||||||
|
*
|
||||||
|
* 只更新标准,不通过485下发数据。
|
||||||
|
*
|
||||||
|
* @note 加减操作已在SquareLine工程内部实现,无需手动调用。
|
||||||
|
* @param[in] e not used
|
||||||
|
*/
|
||||||
|
void on_spinboxStage_valueChanged(lv_event_t * e)
|
||||||
|
{
|
||||||
|
/*获取当前挡位并更新标准体积数据*/
|
||||||
|
int32_t value = lv_spinbox_get_value(e->target);
|
||||||
|
lv_label_set_text_fmt(ui_pageHome_labelResultStage,"%ld",value);
|
||||||
|
|
||||||
|
standard_volume_refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 标准体积数据刷新
|
||||||
|
*
|
||||||
|
* 修改标准体积数据,设置最大最小值。
|
||||||
|
* 最后根据标准判定当前读取到的体积流量是否合格
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static void standard_volume_refresh(void)
|
||||||
|
{
|
||||||
|
/*获取当前的呼吸频率及挡位*/
|
||||||
|
fluxProtocol.currentBPM = lv_spinbox_get_value(ui_pageHome_spinboxRate);
|
||||||
|
fluxProtocol.currentStage = lv_spinbox_get_value(ui_pageHome_spinboxStage);
|
||||||
|
|
||||||
|
/*获取当前测试设备类型*/
|
||||||
|
fluxProtocol.currentDevice = lv_dropdown_get_selected(ui_pageSetting_dropdownDeviceType);
|
||||||
|
|
||||||
|
if (fluxProtocol.currentDevice == Spirit3)
|
||||||
|
{
|
||||||
|
/*判定当前测试设备为Spirit-3*/
|
||||||
|
/*获取标准体积数据*/
|
||||||
|
fluxProtocol.nominalVolumeStage = Spirit3_Volume[fluxProtocol.currentStage-1];
|
||||||
|
}else if (fluxProtocol.currentDevice == Spirit6)
|
||||||
|
{
|
||||||
|
/*判定当前测试设备为Spirit-6*/
|
||||||
|
fluxProtocol.nominalVolumeStage = Spirit6_Volume[fluxProtocol.currentStage-1];
|
||||||
|
}else if(fluxProtocol.currentDevice == YU_Lite8)
|
||||||
|
{
|
||||||
|
/*判定当前测试设备为YU-Lite-8*/
|
||||||
|
fluxProtocol.nominalVolumeStage = YULite8_Volume[fluxProtocol.currentStage-1];
|
||||||
|
}
|
||||||
|
|
||||||
|
float Volume_nominal = fluxProtocol.nominalVolumeStage /fluxProtocol.currentBPM*1.0;
|
||||||
|
float VolumeMax = Volume_nominal*1.15;
|
||||||
|
float VolumeMin = Volume_nominal*0.85;
|
||||||
|
|
||||||
|
lv_label_set_text_fmt(ui_pageHome_labelNominalVolume,"%.2f",Volume_nominal);
|
||||||
|
lv_label_set_text_fmt(ui_pageHome_labelNominalVolumeMax,"%.2f",VolumeMax);
|
||||||
|
lv_label_set_text_fmt(ui_pageHome_labelNominalVolumeMin,"%.2f",VolumeMin);
|
||||||
|
|
||||||
|
/*根据标准值判定当前检测结果是否合格*/
|
||||||
|
RefreshResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
/************************************ 挡位更改响应函数 end ******************************************* */
|
||||||
|
|
||||||
|
/************************************ 开始测试按键按下 start ******************************************* */
|
||||||
|
/**
|
||||||
|
* @brief 开始测试按键按下后响应事件
|
||||||
|
*
|
||||||
|
* @details 执行流程:
|
||||||
|
* 1. 下发测试时间,确保测试时间正确
|
||||||
|
* 2. 创建定时器,配置定时器计时时间
|
||||||
|
* 3. 下发启动测试指令
|
||||||
|
*
|
||||||
|
* @param[in] e not used
|
||||||
|
*/
|
||||||
|
void on_buttonStartTest_clicked(lv_event_t * e)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* 开始测试前 下发积分时间,确保测试时间正确 */
|
||||||
|
comulate_time_set();
|
||||||
|
uint8_t bytes[4];
|
||||||
|
float time = (float)lv_spinbox_get_value(ui_pageFluxRead_spinboxTime);
|
||||||
|
memcpy(bytes, &time, 4);
|
||||||
|
|
||||||
|
/*下发命令*/
|
||||||
|
flux_frame.ADDR = FLUX_ADDR;
|
||||||
|
flux_frame.FUNC = FLUX_FUNC_SET_SINGLE;
|
||||||
|
|
||||||
|
flux_frame.DATA[0] = 0x00;
|
||||||
|
flux_frame.DATA[1] = 0x02;
|
||||||
|
flux_frame.DATA[2] = bytes[3];
|
||||||
|
flux_frame.DATA[3] = bytes[2];
|
||||||
|
|
||||||
|
ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame));
|
||||||
|
|
||||||
|
/*创建定时器*/
|
||||||
|
lv_timer_t * comulateResultReadTimer;
|
||||||
|
/* 基于定时器进行任务调用 */
|
||||||
|
comulateResultReadTimer = lv_timer_create(comulate_result_read, 500, NULL);
|
||||||
|
/* 只重复一次 */
|
||||||
|
lv_timer_set_repeat_count(comulateResultReadTimer, 1);
|
||||||
|
|
||||||
|
/* 根据测试时间确定定时器延时 */
|
||||||
|
int32_t timeS = lv_spinbox_get_value(ui_pageFluxRead_spinboxTime);
|
||||||
|
lv_timer_set_period(comulateResultReadTimer, timeS*1000+2000);
|
||||||
|
|
||||||
|
/*下发启动测试指令*/
|
||||||
|
flux_frame_start.ADDR = FLUX_ADDR;
|
||||||
|
flux_frame_start.FUNC = FLUX_FUNC_SET_SINGLE;
|
||||||
|
|
||||||
|
flux_frame_start.DATA[0] = 0x00;
|
||||||
|
flux_frame_start.DATA[1] = 0x01;
|
||||||
|
flux_frame_start.DATA[2] = 0x00;
|
||||||
|
flux_frame_start.DATA[3] = 0x01;
|
||||||
|
ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame_start));
|
||||||
|
|
||||||
|
/* 修改Label 开始测试 */
|
||||||
|
lv_label_set_text(ui_pageHome_labelStartTest,"Testing...");
|
||||||
|
|
||||||
|
/* 开始计时 */
|
||||||
|
lv_timer_enable(comulateResultReadTimer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 定时器响应函数
|
||||||
|
*
|
||||||
|
* 时间到达后执行
|
||||||
|
* 定时器响应函数,用于定时获取测试结果,并更新界面。
|
||||||
|
*
|
||||||
|
* @param[in] timer not used
|
||||||
|
*/
|
||||||
|
static void comulate_result_read(lv_timer_t * timer)
|
||||||
|
{
|
||||||
|
/*下发数据获取指令*/
|
||||||
|
/* 起始地址为 0x00 */
|
||||||
|
flux_frame.DATA[0] = 0;
|
||||||
|
flux_frame.DATA[1] = 0;
|
||||||
|
|
||||||
|
/* 数据长度为 120 */
|
||||||
|
flux_frame.DATA[2] = 0;
|
||||||
|
flux_frame.DATA[3] = 120;
|
||||||
|
flux_frame.FUNC = FLUX_FUNC_READ;
|
||||||
|
|
||||||
|
/*下发问询120个参数*/
|
||||||
|
ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame));
|
||||||
|
|
||||||
|
lv_label_set_text(ui_pageHome_labelStartTest,"Test Complete!");
|
||||||
|
}
|
||||||
@ -1,8 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* @file ui_event_wifi.c
|
* @file ui_event.c
|
||||||
* @brief 此文件中专门实现WIFI事件的处理
|
* @brief 此文件中专门实现事件的处理
|
||||||
*
|
|
||||||
* 仅仅Debug模式下运行
|
|
||||||
*
|
*
|
||||||
* @author wang xiang en
|
* @author wang xiang en
|
||||||
* @date 2025-04-19
|
* @date 2025-04-19
|
||||||
@ -24,34 +22,20 @@
|
|||||||
|
|
||||||
#include "FluxProtocol.h"
|
#include "FluxProtocol.h"
|
||||||
|
|
||||||
|
#if CONFIG_WIFI_SCAN_ENABLE
|
||||||
|
|
||||||
/*包含SNTP的头文件*/
|
/*包含SNTP的头文件*/
|
||||||
#include "lwip/apps/sntp.h"
|
#include "lwip/apps/sntp.h"
|
||||||
#include <time.h>
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
/*更新当前测试标准*/
|
* @brief 更改测试的设备类型
|
||||||
static void standardVolumeRefresh(void);
|
*
|
||||||
|
* 设备类型选择回调函数
|
||||||
/*根据呼吸频率调整积分时间*/
|
*
|
||||||
static void comulateTimeSend(void);
|
* @param[in] e 设置页的设备下拉菜单
|
||||||
|
*/
|
||||||
/*创建定时器*/
|
|
||||||
static void comulateResultRead(lv_timer_t * timer)
|
|
||||||
{
|
|
||||||
/*下发数据获取指令*/
|
|
||||||
flux_frame.DATA[1] = 0;
|
|
||||||
flux_frame.DATA[3] = 120;
|
|
||||||
flux_frame.FUNC = 0x03;
|
|
||||||
|
|
||||||
/*下发问询120个参数*/
|
|
||||||
ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame));
|
|
||||||
|
|
||||||
lv_label_set_text(ui_pageHome_labelStartTest,"Test Complete!");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*设备类型选择回调函数*/
|
|
||||||
void on_dropdownDeviceType_valueChanged(lv_event_t * e)
|
void on_dropdownDeviceType_valueChanged(lv_event_t * e)
|
||||||
{
|
{
|
||||||
char buf[32]={};
|
char buf[32]={};
|
||||||
@ -66,11 +50,15 @@ void on_dropdownDeviceType_valueChanged(lv_event_t * e)
|
|||||||
}else{
|
}else{
|
||||||
lv_spinbox_set_range(ui_pageHome_spinboxStage,1,6);
|
lv_spinbox_set_range(ui_pageHome_spinboxStage,1,6);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
/*SD卡读取回调函数*/
|
* @brief 读取当前SD卡剩余空间信息并更新页面
|
||||||
|
*
|
||||||
|
* SD卡读取回调函数
|
||||||
|
*
|
||||||
|
* @param[in] e not used
|
||||||
|
*/
|
||||||
void on_buttonReadSDCard_clicked(lv_event_t * e)
|
void on_buttonReadSDCard_clicked(lv_event_t * e)
|
||||||
{
|
{
|
||||||
/*首先清空显示页面*/
|
/*首先清空显示页面*/
|
||||||
@ -88,157 +76,22 @@ void on_buttonReadSDCard_clicked(lv_event_t * e)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
/************************************ 测试流程函数 ******************************************* */
|
* @brief pageFluxRead 向流量计索要120个参数
|
||||||
/*pageHome 开始测试按键按下回调函数*/
|
*
|
||||||
int32_t timeS = 0;
|
* 获取当前流量数据
|
||||||
void on_buttonStartTest_clicked(lv_event_t * e)
|
*
|
||||||
{
|
* @param[in] e not used
|
||||||
|
*/
|
||||||
/*下发积分时间*/
|
|
||||||
#if 1
|
|
||||||
comulateTimeSend();
|
|
||||||
uint8_t bytes[4];
|
|
||||||
float time = (float)lv_spinbox_get_value(ui_pageFluxRead_spinboxTime);
|
|
||||||
memcpy(bytes, &time, 4);
|
|
||||||
|
|
||||||
/*下发命令*/
|
|
||||||
flux_frame.ADDR = FLUX_ADDR;
|
|
||||||
flux_frame.FUNC = FLUX_FUNC_SET_SINGLE;
|
|
||||||
|
|
||||||
flux_frame.DATA[0] = 0x00;
|
|
||||||
flux_frame.DATA[1] = 0x02;
|
|
||||||
flux_frame.DATA[2] = bytes[3];
|
|
||||||
flux_frame.DATA[3] = bytes[2];
|
|
||||||
|
|
||||||
ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame));
|
|
||||||
|
|
||||||
#endif
|
|
||||||
/*基于定时器进行任务调用*/
|
|
||||||
lv_timer_t * comulateResultReadTimer;
|
|
||||||
comulateResultReadTimer = lv_timer_create(comulateResultRead, 500, NULL);
|
|
||||||
lv_timer_set_repeat_count(comulateResultReadTimer, 1);
|
|
||||||
|
|
||||||
|
|
||||||
timeS = lv_spinbox_get_value(ui_pageFluxRead_spinboxTime);
|
|
||||||
lv_timer_set_period(comulateResultReadTimer, timeS*1000+2000);
|
|
||||||
|
|
||||||
/*下发启动测试指令*/
|
|
||||||
flux_frame_start.ADDR = FLUX_ADDR;
|
|
||||||
flux_frame_start.FUNC = FLUX_FUNC_SET_SINGLE;
|
|
||||||
|
|
||||||
flux_frame_start.DATA[0] = 0x00;
|
|
||||||
flux_frame_start.DATA[1] = 0x01;
|
|
||||||
flux_frame_start.DATA[2] = 0x00;
|
|
||||||
flux_frame_start.DATA[3] = 0x01;
|
|
||||||
ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame_start));
|
|
||||||
|
|
||||||
lv_label_set_text(ui_pageHome_labelStartTest,"Testing...");
|
|
||||||
|
|
||||||
lv_timer_enable(comulateResultReadTimer);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*pageHome 呼吸频率减操作*/
|
|
||||||
void on_buttonRateMinus_clicked(lv_event_t * e)
|
|
||||||
{
|
|
||||||
uint16_t value = lv_spinbox_get_value(ui_pageHome_spinboxRate);
|
|
||||||
lv_spinbox_set_value(ui_pageHome_spinboxRate,value-5);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*pageHome 呼吸频率加操作*/
|
|
||||||
void on_buttonRatePlus_clicked(lv_event_t * e)
|
|
||||||
{
|
|
||||||
uint16_t value = lv_spinbox_get_value(ui_pageHome_spinboxRate);
|
|
||||||
lv_spinbox_set_value(ui_pageHome_spinboxRate,value+5);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*pageHome 切换挡位之后*/
|
|
||||||
void on_spinboxStage_valueChanged(lv_event_t * e)
|
|
||||||
{
|
|
||||||
/*获取当前挡位并更新标准体积数据*/
|
|
||||||
int32_t value = lv_spinbox_get_value(e->target);
|
|
||||||
lv_label_set_text_fmt(ui_pageHome_labelResultStage,"%ld",value);
|
|
||||||
|
|
||||||
standardVolumeRefresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*pageHome 频率值改变*/
|
|
||||||
void on_spinboxRate_valueChanged(lv_event_t * e)
|
|
||||||
{
|
|
||||||
/*更改下方测试结果部分的频率信息*/
|
|
||||||
FluxMachineData.breathRate = lv_spinbox_get_value(e->target);
|
|
||||||
lv_label_set_text_fmt(ui_pageHome_labelResultRate,"%ld",FluxMachineData.breathRate);
|
|
||||||
|
|
||||||
/*刷新标准体积数据*/
|
|
||||||
standardVolumeRefresh();
|
|
||||||
|
|
||||||
/*下发测试时间*/
|
|
||||||
comulateTimeSend();
|
|
||||||
|
|
||||||
uint8_t bytes[4];
|
|
||||||
float time = (float)lv_spinbox_get_value(ui_pageFluxRead_spinboxTime);
|
|
||||||
memcpy(bytes, &time, 4);
|
|
||||||
|
|
||||||
/*下发命令*/
|
|
||||||
flux_frame.ADDR = FLUX_ADDR;
|
|
||||||
flux_frame.FUNC = FLUX_FUNC_SET_SINGLE;
|
|
||||||
|
|
||||||
flux_frame.DATA[0] = 0x00;
|
|
||||||
flux_frame.DATA[1] = 0x02;
|
|
||||||
flux_frame.DATA[2] = bytes[3];
|
|
||||||
flux_frame.DATA[3] = bytes[2];
|
|
||||||
|
|
||||||
ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*pageHome 标准体积数据刷新*/
|
|
||||||
static void standardVolumeRefresh(void)
|
|
||||||
{
|
|
||||||
/*获取当前的呼吸频率及挡位*/
|
|
||||||
fluxProtocol.currentBPM = lv_spinbox_get_value(ui_pageHome_spinboxRate);
|
|
||||||
fluxProtocol.currentStage = lv_spinbox_get_value(ui_pageHome_spinboxStage);
|
|
||||||
|
|
||||||
/*获取当前测试设备类型*/
|
|
||||||
fluxProtocol.currentDevice = lv_dropdown_get_selected(ui_pageSetting_dropdownDeviceType);
|
|
||||||
|
|
||||||
if (fluxProtocol.currentDevice == Spirit3)
|
|
||||||
{
|
|
||||||
/*判定当前测试设备为Spirit-3*/
|
|
||||||
/*获取标准体积数据*/
|
|
||||||
fluxProtocol.nominalVolumeStage = Spirit3_Volume[fluxProtocol.currentStage-1];
|
|
||||||
}else if (fluxProtocol.currentDevice == Spirit6)
|
|
||||||
{
|
|
||||||
/*判定当前测试设备为Spirit-6*/
|
|
||||||
fluxProtocol.nominalVolumeStage = Spirit6_Volume[fluxProtocol.currentStage-1];
|
|
||||||
}else if(fluxProtocol.currentDevice == YU_Lite8)
|
|
||||||
{
|
|
||||||
/*判定当前测试设备为YU-Lite-8*/
|
|
||||||
fluxProtocol.nominalVolumeStage = YULite8_Volume[fluxProtocol.currentStage-1];
|
|
||||||
}
|
|
||||||
|
|
||||||
float Volume_nominal = fluxProtocol.nominalVolumeStage /fluxProtocol.currentBPM*1.0;
|
|
||||||
float VolumeMax = Volume_nominal*1.15;
|
|
||||||
float VolumeMin = Volume_nominal*0.85;
|
|
||||||
|
|
||||||
lv_label_set_text_fmt(ui_pageHome_labelNominalVolume,"%.2f",Volume_nominal);
|
|
||||||
lv_label_set_text_fmt(ui_pageHome_labelNominalVolumeMax,"%.2f",VolumeMax);
|
|
||||||
lv_label_set_text_fmt(ui_pageHome_labelNominalVolumeMin,"%.2f",VolumeMin);
|
|
||||||
|
|
||||||
/*根据标准值判定当前检测结果是否合格*/
|
|
||||||
RefreshResult();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*pageFluxRead 获取当前流量数据*/
|
|
||||||
void on_buttonReadFlux_clicked(lv_event_t * e)
|
void on_buttonReadFlux_clicked(lv_event_t * e)
|
||||||
{
|
{
|
||||||
|
/*下发数据获取指令*/
|
||||||
|
/* 起始地址为 0x00 */
|
||||||
|
flux_frame.DATA[0] = 0;
|
||||||
flux_frame.DATA[1] = 0;
|
flux_frame.DATA[1] = 0;
|
||||||
|
|
||||||
|
/* 数据长度为 120 */
|
||||||
|
flux_frame.DATA[2] = 0;
|
||||||
flux_frame.DATA[3] = 120;
|
flux_frame.DATA[3] = 120;
|
||||||
flux_frame.FUNC = FLUX_FUNC_READ;
|
flux_frame.FUNC = FLUX_FUNC_READ;
|
||||||
|
|
||||||
@ -257,7 +110,6 @@ void on_labelTestVolume_valueChanged(lv_event_t * e)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*更新工作模式 —— 功能已屏蔽*/
|
/*更新工作模式 —— 功能已屏蔽*/
|
||||||
void on_dropDownWorkmode_valueChanged(lv_event_t * e)
|
void on_dropDownWorkmode_valueChanged(lv_event_t * e)
|
||||||
{
|
{
|
||||||
@ -266,7 +118,6 @@ void on_dropDownWorkmode_valueChanged(lv_event_t * e)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*向流量计下发计时时间*/
|
/*向流量计下发计时时间*/
|
||||||
void on_spinboxTime_valueChanged(lv_event_t * e)
|
void on_spinboxTime_valueChanged(lv_event_t * e)
|
||||||
{
|
{
|
||||||
@ -320,152 +171,18 @@ void on_spinboxTime_valueChanged(lv_event_t * e)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*启动流量计*/
|
/**
|
||||||
|
* @brief pageFlux页面中 启动按键(Not Used)
|
||||||
|
*
|
||||||
|
* 启动流量计 开始测试
|
||||||
|
*
|
||||||
|
* @param[in] e not used
|
||||||
|
*/
|
||||||
void on_buttonFluxStart_clicked(lv_event_t * e)
|
void on_buttonFluxStart_clicked(lv_event_t * e)
|
||||||
{
|
{
|
||||||
FLUX_TEST_START;
|
FLUX_TEST_START;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*根据spinbox中的值下发积分时间*/
|
|
||||||
/*注意:此处修改了spinboxTime 的值,不可以在spinboxTime_valueChanged中调用!!*/
|
|
||||||
static void comulateTimeSend(void)
|
|
||||||
{
|
|
||||||
/*获取当前呼吸频率*/
|
|
||||||
FluxMachineData.breathRate = lv_spinbox_get_value(ui_pageHome_spinboxRate);
|
|
||||||
|
|
||||||
uint16_t currntTimes = lv_dropdown_get_selected(ui_pageFluxRead_dropdownPulseTimes);
|
|
||||||
|
|
||||||
ESP_LOGI("comulateTimeSend","currentTimes:%d",currntTimes);
|
|
||||||
|
|
||||||
if (currntTimes == 0)
|
|
||||||
{
|
|
||||||
/* 10次脉冲计量 */
|
|
||||||
switch (FluxMachineData.breathRate)
|
|
||||||
{
|
|
||||||
case 15:
|
|
||||||
/*呼吸频率为15BPM时,积分时间设定为40秒*/
|
|
||||||
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,40);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 20:
|
|
||||||
/*呼吸频率为20BPM时,积分时间设定为30秒*/
|
|
||||||
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,30);
|
|
||||||
break;
|
|
||||||
case 25:
|
|
||||||
/*呼吸频率为25BPM时,积分时间设定为24秒*/
|
|
||||||
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,24);
|
|
||||||
break;
|
|
||||||
case 30:
|
|
||||||
/*呼吸频率为30BPM时,积分时间设定为20秒*/
|
|
||||||
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,20);
|
|
||||||
break;
|
|
||||||
case 35:
|
|
||||||
/*呼吸频率为35BPM时,积分时间设定为16秒*/
|
|
||||||
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,18);
|
|
||||||
break;
|
|
||||||
case 40:
|
|
||||||
/*呼吸频率为40BPM时,积分时间设定为15秒*/
|
|
||||||
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,15);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}else if (currntTimes == 1)
|
|
||||||
{
|
|
||||||
/* 20次脉冲 */
|
|
||||||
switch (FluxMachineData.breathRate)
|
|
||||||
{
|
|
||||||
case 15:
|
|
||||||
/*呼吸频率为15BPM时,积分时间设定为40秒*/
|
|
||||||
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,80);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 20:
|
|
||||||
/*呼吸频率为20BPM时,积分时间设定为30秒*/
|
|
||||||
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,60);
|
|
||||||
break;
|
|
||||||
case 25:
|
|
||||||
/*呼吸频率为25BPM时,积分时间设定为24秒*/
|
|
||||||
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,48);
|
|
||||||
break;
|
|
||||||
case 30:
|
|
||||||
/*呼吸频率为30BPM时,积分时间设定为20秒*/
|
|
||||||
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,40);
|
|
||||||
break;
|
|
||||||
case 35:
|
|
||||||
/*呼吸频率为35BPM时,积分时间设定为16秒*/
|
|
||||||
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,36);
|
|
||||||
break;
|
|
||||||
case 40:
|
|
||||||
/*呼吸频率为40BPM时,积分时间设定为15秒*/
|
|
||||||
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,30);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}else if (currntTimes == 2)
|
|
||||||
{
|
|
||||||
/* 30次脉冲 */
|
|
||||||
|
|
||||||
switch (FluxMachineData.breathRate)
|
|
||||||
{
|
|
||||||
case 15:
|
|
||||||
/*呼吸频率为15BPM时,积分时间设定为40秒*/
|
|
||||||
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,120);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 20:
|
|
||||||
/*呼吸频率为20BPM时,积分时间设定为30秒*/
|
|
||||||
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,90);
|
|
||||||
break;
|
|
||||||
case 25:
|
|
||||||
/*呼吸频率为25BPM时,积分时间设定为24秒*/
|
|
||||||
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,72);
|
|
||||||
break;
|
|
||||||
case 30:
|
|
||||||
/*呼吸频率为30BPM时,积分时间设定为20秒*/
|
|
||||||
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,60);
|
|
||||||
break;
|
|
||||||
case 35:
|
|
||||||
/*呼吸频率为35BPM时,积分时间设定为16秒*/
|
|
||||||
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,54);
|
|
||||||
break;
|
|
||||||
case 40:
|
|
||||||
/*呼吸频率为40BPM时,积分时间设定为15秒*/
|
|
||||||
lv_spinbox_set_value(ui_pageFluxRead_spinboxTime,45);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*获取呼吸脉冲次数*/
|
|
||||||
void on_dropdownPulseTimes_valueChanged(lv_event_t * e)
|
|
||||||
{
|
|
||||||
/*下发测试时间*/
|
|
||||||
comulateTimeSend();
|
|
||||||
|
|
||||||
uint8_t bytes[4];
|
|
||||||
float time = (float)lv_spinbox_get_value(ui_pageFluxRead_spinboxTime);
|
|
||||||
memcpy(bytes, &time, 4);
|
|
||||||
|
|
||||||
/*下发命令*/
|
|
||||||
flux_frame.ADDR = FLUX_ADDR;
|
|
||||||
flux_frame.FUNC = FLUX_FUNC_SET_SINGLE;
|
|
||||||
|
|
||||||
flux_frame.DATA[0] = 0x00;
|
|
||||||
flux_frame.DATA[1] = 0x02;
|
|
||||||
flux_frame.DATA[2] = bytes[3];
|
|
||||||
flux_frame.DATA[3] = bytes[2];
|
|
||||||
|
|
||||||
ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*不执行任何操作*/
|
/*不执行任何操作*/
|
||||||
void on_buttonTimeUpdate_clicked(lv_event_t * e)
|
void on_buttonTimeUpdate_clicked(lv_event_t * e)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -498,13 +498,13 @@ CONFIG_ESPTOOLPY_FLASHFREQ_80M_DEFAULT=y
|
|||||||
CONFIG_ESPTOOLPY_FLASHFREQ="80m"
|
CONFIG_ESPTOOLPY_FLASHFREQ="80m"
|
||||||
# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set
|
# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set
|
||||||
# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set
|
# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set
|
||||||
CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y
|
# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set
|
||||||
# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set
|
# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set
|
||||||
# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set
|
CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y
|
||||||
# CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set
|
# CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set
|
||||||
# CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set
|
# CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set
|
||||||
# CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set
|
# CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set
|
||||||
CONFIG_ESPTOOLPY_FLASHSIZE="4MB"
|
CONFIG_ESPTOOLPY_FLASHSIZE="16MB"
|
||||||
CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE=y
|
CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE=y
|
||||||
CONFIG_ESPTOOLPY_BEFORE_RESET=y
|
CONFIG_ESPTOOLPY_BEFORE_RESET=y
|
||||||
# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set
|
# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user