From db7c0f4c7a1db7626c7c13d0487a07e757e0598f Mon Sep 17 00:00:00 2001 From: ipason Date: Sat, 10 May 2025 16:55:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BF=AE=E6=94=B9=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E6=95=B0=E6=8D=AE=E9=A2=9C=E8=89=B2=E9=83=A8=E5=88=86?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=EF=BC=8C=E5=AD=98=E5=9C=A8=E9=83=A8=E5=88=86?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/FluxProtocol/FluxProtocol.c | 21 +++-- components/FluxProtocol/FluxProtocol.h | 8 +- components/FluxTime/FluxTime.h | 8 +- components/FluxUI/ui_events.c | 5 + components/FluxUart/FluxUart.c | 122 +++++++++++++++++-------- main/main.cpp | 14 +-- 6 files changed, 127 insertions(+), 51 deletions(-) diff --git a/components/FluxProtocol/FluxProtocol.c b/components/FluxProtocol/FluxProtocol.c index fee0236..b75f138 100644 --- a/components/FluxProtocol/FluxProtocol.c +++ b/components/FluxProtocol/FluxProtocol.c @@ -94,8 +94,9 @@ void bs_test_task(void* arg) /* 进行6次循环测计数 */ uint8_t testCount = 0; - /* 清空所有事件组 */ - xEventGroupClearBits(g_bs_test_event_group,BIT0|BIT1|BIT2|BIT3|BIT4|BIT5|BIT6); + /* 默认所有频率结果正确 */ + xEventGroupSetBits(g_bs_test_event_group,BIT0|BIT1|BIT2|BIT3|BIT4|BIT5|BIT6); + ESP_LOGI("bs_test_task", "初始化后判断事件组的值%lu", xEventGroupGetBits(g_bs_test_event_group)); /* *0-5 对应15-40BPM测试结果 *6 对应是否正在等待测试结束 @@ -115,7 +116,7 @@ void bs_test_task(void* arg) /* 调节呼吸模拟器频率 */ bs_bpm_send(bs_addr_all[testCount]); lv_label_set_text_fmt(ui_pageHome_labelBSInfo,"%s %s",test_rate[testCount],test_info[5]); - vTaskDelay(5000 / portTICK_PERIOD_MS); + vTaskDelay(10000 / portTICK_PERIOD_MS); /* 下发测试时间 */ flux_test_time_set(flux_test_time_series[testCount]); @@ -140,28 +141,34 @@ void bs_test_task(void* arg) /* 读取测试结果 */ flux_test_result_get(); + WRITE_LOG_TO_SD("测试结果获取中"); lv_label_set_text_fmt(ui_pageHome_labelBSInfo,"%s %s",test_rate[testCount],test_info[3]); /* 等待2s进行结果获取 */ - vTaskDelay(2000 / portTICK_PERIOD_MS); + vTaskDelay(3000 / portTICK_PERIOD_MS); /* 清空进度条 */ xEventGroupClearBits(g_bs_test_event_group,BIT6); FLUX_PROGRESS_BAR_CONTROL(0); + ESP_LOGI("bs_test_task", "判断事件组的值%lu", xEventGroupGetBits(g_bs_test_event_group)); + /* 根据测试结果确定是否需要复测 */ - if (xEventGroupGetBits(g_bs_test_event_group) & g_bs_test_event_group_bits[testCount]) + if ((xEventGroupGetBits(g_bs_test_event_group) & g_bs_test_event_group_bits[testCount])!= 0) { /* 测试结果正常,进行下一挡位测试 */ testCount++; + WRITE_LOG_TO_SD("测试结果正常,进行下一挡位测试"); + }else{ + WRITE_LOG_TO_SD("测试结果异常,再次测试?"); /* 测试失败,重复上一次测试 */ lv_label_set_text_fmt(ui_pageHome_labelBSInfo,"%s %s",test_rate[testCount],"retry"); retest_count++; if(retest_count == 2) { lv_label_set_text_fmt(ui_pageHome_labelBSInfo,"%s %s",test_rate[testCount],"failed"); - + WRITE_LOG_TO_SD("测试失败 进行下一档测试,暂时放弃该挡位"); /* 当前挡位失败,进行下一挡位测试 */ retest_count = 0; testCount++; @@ -169,6 +176,7 @@ void bs_test_task(void* arg) } if (testCount == 6) { + WRITE_LOG_TO_SD("测试结束"); break; } } @@ -177,6 +185,7 @@ void bs_test_task(void* arg) lv_label_set_text_fmt(ui_pageHome_labelBSInfo,"%s",test_info[4]); + WRITE_LOG_TO_SD("测试结束 任务回收"); /* 任务测试完毕 删除任务 */ lv_label_set_text(ui_pageHome_labelStartTest1,"Start Test BS"); lv_label_set_text(ui_pageHome_labelBSInfo,"wait for test"); diff --git a/components/FluxProtocol/FluxProtocol.h b/components/FluxProtocol/FluxProtocol.h index 4daae43..57303c8 100644 --- a/components/FluxProtocol/FluxProtocol.h +++ b/components/FluxProtocol/FluxProtocol.h @@ -138,7 +138,13 @@ extern struct sockaddr_in server_addr; lv_label_set_text(ui_pageHome_LabelRate25Result, "0");\ lv_label_set_text(ui_pageHome_LabelRate30Result, "0");\ lv_label_set_text(ui_pageHome_LabelRate35Result, "0");\ - lv_label_set_text(ui_pageHome_LabelRate40Result, "0"); + lv_label_set_text(ui_pageHome_LabelRate40Result, "0");\ + lv_obj_set_style_text_color(ui_pageHome_LabelRate15Result, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);\ + lv_obj_set_style_text_color(ui_pageHome_LabelRate20Result, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);\ + lv_obj_set_style_text_color(ui_pageHome_LabelRate25Result, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);\ + lv_obj_set_style_text_color(ui_pageHome_LabelRate30Result, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);\ + lv_obj_set_style_text_color(ui_pageHome_LabelRate35Result, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);\ + lv_obj_set_style_text_color(ui_pageHome_LabelRate40Result, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT); #define NOM_ALL_RESULT_CLEAR lv_label_set_text(ui_pageHome_labelTestResult, "0"); diff --git a/components/FluxTime/FluxTime.h b/components/FluxTime/FluxTime.h index dc59128..3bd85ee 100644 --- a/components/FluxTime/FluxTime.h +++ b/components/FluxTime/FluxTime.h @@ -47,7 +47,13 @@ void time_synic_task(void *arg); void soft_timer_task(void* arg); #endif -/*获取当前时间*/ +/** + * @brief 时间获取API + * + * 将时间转换为字符串上交 + * + * @return 时间字符串提交函数 + */ char* get_time_str(void); #ifdef __cplusplus diff --git a/components/FluxUI/ui_events.c b/components/FluxUI/ui_events.c index 8a8d1fc..372370a 100644 --- a/components/FluxUI/ui_events.c +++ b/components/FluxUI/ui_events.c @@ -216,6 +216,8 @@ void on_switchShutOff_valueChanged(lv_event_t * e) /* 清空SD卡中的内容 */ void on_buttonClearSD_clicked(lv_event_t * e) { +/* 取消掉掉这个功能 */ +#if 0 server_addr.sin_family = AF_INET; server_addr.sin_port = htons(5656); server_addr.sin_addr.s_addr = inet_addr("192.168.155.238"); @@ -228,11 +230,14 @@ void on_buttonClearSD_clicked(lv_event_t * e) }else{ ESP_LOGI("on_buttonClearSD_clicked", "sendto success"); } +#endif } static void bs_clicked_1s(lv_timer_t * timer) { + /* 隔了1秒后执行一次发送 false */ uint16_t currentRate = lv_dropdown_get_selected(ui_pageLung_Dropdown1); + ModbusRTU_Send_0x05(bs_addr_all[currentRate],false); } diff --git a/components/FluxUart/FluxUart.c b/components/FluxUart/FluxUart.c index 47392eb..99959bb 100644 --- a/components/FluxUart/FluxUart.c +++ b/components/FluxUart/FluxUart.c @@ -121,6 +121,14 @@ unsigned short CRC16(unsigned char* pchMsg, unsigned short wDataLen) */ void uart1_echoTask(void* arg) { + /* 获取当前设备类型 */ + uint16_t device_type = lv_dropdown_get_selected(ui_pageHome_DropdownTestTypeBS); + int32_t current_stage = lv_spinbox_get_value(ui_pageHome_spinboxStageBS); + float stage_volume = 0; + float stage_rate_volume = 0; + /* 记录测试结果是否合格 */ + bool is_test_result_right = true; + /* Configure parameters of an UART driver, * communication pins and install the driver */ uart_config_t uart_config = { @@ -220,42 +228,11 @@ void uart1_echoTask(void* arg) /* 若当前是NOM模式,直接刷新结果在Nom的界面 */ RefreshResult(); }else{ + WRITE_LOG_TO_SD("判断当前测试模式为BS模式"); /* 若当前是BS模式,刷新结果在BS的界面 */ sdData.flux_test_result.test_result[currentTestRate] = sdData.flux_test_result.current_test_result; - /* 根据当前BS测试阶段刷新结果 */ - switch (currentTestRate) - { - case BS_RATE_15BPM: - /* 如果当前测试挡位为15BPM,刷新结果在BS界面的15BPM界面 */ - lv_label_set_text_fmt(ui_pageHome_LabelRate15Result,"%.1f",sdData.flux_test_result.current_test_result); - break; - case BS_RATE_20BPM: - lv_label_set_text_fmt(ui_pageHome_LabelRate20Result,"%.1f",sdData.flux_test_result.current_test_result); - break; - case BS_RATE_25BPM: - lv_label_set_text_fmt(ui_pageHome_LabelRate25Result,"%.1f",sdData.flux_test_result.current_test_result); - break; - case BS_RATE_30BPM: - lv_label_set_text_fmt(ui_pageHome_LabelRate30Result,"%.1f",sdData.flux_test_result.current_test_result); - break; - case BS_RATE_35BPM: - lv_label_set_text_fmt(ui_pageHome_LabelRate35Result,"%.1f",sdData.flux_test_result.current_test_result); - break; - case BS_RATE_40BPM: - lv_label_set_text_fmt(ui_pageHome_LabelRate40Result,"%.1f",sdData.flux_test_result.current_test_result); - break; - - default: - break; - } - - /* 获取当前设备类型 */ - uint16_t device_type = lv_dropdown_get_selected(ui_pageHome_DropdownTestTypeBS); - int32_t current_stage = lv_spinbox_get_value(ui_pageHome_spinboxStageBS); - float stage_volume = 0; - /* 判断测试结果是否合格 */ switch (device_type) { @@ -271,16 +248,89 @@ void uart1_echoTask(void* arg) default: break; } + + /* 计算呼吸频率下的体积流量值 */ + stage_rate_volume = stage_volume/((currentTestRate+3.0)*5); - float stage_rate_volume = stage_volume/((currentTestRate+3.0)*5); if((sdData.flux_test_result.current_test_result > stage_rate_volume * 1.15)|(sdData.flux_test_result.current_test_result < stage_rate_volume * 0.85)) { /* 测试结果不合格,刷新结果为X */ - xEventGroupSetBits(g_bs_test_event_group,g_bs_test_event_group_bits[currentTestRate]); + xEventGroupClearBits(g_bs_test_event_group,g_bs_test_event_group_bits[currentTestRate]); + is_test_result_right = false; + WRITE_LOG_TO_SD("测试结果不合格"); }else{ /* 测试合格*/ - xEventGroupClearBits(g_bs_test_event_group,g_bs_test_event_group_bits[currentTestRate]); + xEventGroupSetBits(g_bs_test_event_group,g_bs_test_event_group_bits[currentTestRate]); + is_test_result_right = true; + WRITE_LOG_TO_SD("测试结果合格"); } + + /* 根据当前BS测试阶段刷新结果 */ + switch (currentTestRate) + { + case BS_RATE_15BPM: + /* 如果当前测试挡位为15BPM,刷新结果在BS界面的15BPM界面 */ + lv_label_set_text_fmt(ui_pageHome_LabelRate15Result,"%.1f",sdData.flux_test_result.current_test_result); + if (is_test_result_right == false) + { + lv_obj_set_style_text_color(ui_pageHome_LabelRate15Result, lv_color_hex(0xFF0000), LV_PART_MAIN | LV_STATE_DEFAULT); + WRITE_LOG_TO_SD("15BPM 测试结果不合格 修改字体颜色为红色"); + }else{ + lv_obj_set_style_text_color(ui_pageHome_LabelRate15Result, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT); + WRITE_LOG_TO_SD("15BPM 测试结果合格 修改字体颜色为黑色"); + } + break; + case BS_RATE_20BPM: + lv_label_set_text_fmt(ui_pageHome_LabelRate20Result,"%.1f",sdData.flux_test_result.current_test_result); + if (is_test_result_right == false) + { + lv_obj_set_style_text_color(ui_pageHome_LabelRate20Result, lv_color_hex(0xFF0000), LV_PART_MAIN | LV_STATE_DEFAULT); + }else{ + lv_obj_set_style_text_color(ui_pageHome_LabelRate20Result, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT); + } + break; + case BS_RATE_25BPM: + lv_label_set_text_fmt(ui_pageHome_LabelRate25Result,"%.1f",sdData.flux_test_result.current_test_result); + if (is_test_result_right == false) + { + lv_obj_set_style_text_color(ui_pageHome_LabelRate25Result, lv_color_hex(0xFF0000), LV_PART_MAIN | LV_STATE_DEFAULT); + }else{ + lv_obj_set_style_text_color(ui_pageHome_LabelRate25Result, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT); + } + break; + case BS_RATE_30BPM: + lv_label_set_text_fmt(ui_pageHome_LabelRate30Result,"%.1f",sdData.flux_test_result.current_test_result); + if (is_test_result_right == false) + { + lv_obj_set_style_text_color(ui_pageHome_LabelRate30Result, lv_color_hex(0xFF0000), LV_PART_MAIN | LV_STATE_DEFAULT); + }else{ + lv_obj_set_style_text_color(ui_pageHome_LabelRate30Result, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT); + } + break; + case BS_RATE_35BPM: + lv_label_set_text_fmt(ui_pageHome_LabelRate35Result,"%.1f",sdData.flux_test_result.current_test_result); + if (is_test_result_right == false) + { + lv_obj_set_style_text_color(ui_pageHome_LabelRate35Result, lv_color_hex(0xFF0000), LV_PART_MAIN | LV_STATE_DEFAULT); + }else{ + lv_obj_set_style_text_color(ui_pageHome_LabelRate35Result, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT); + } + break; + case BS_RATE_40BPM: + lv_label_set_text_fmt(ui_pageHome_LabelRate40Result,"%.1f",sdData.flux_test_result.current_test_result); + if (is_test_result_right == false) + { + lv_obj_set_style_text_color(ui_pageHome_LabelRate40Result, lv_color_hex(0xFF0000), LV_PART_MAIN | LV_STATE_DEFAULT); + }else{ + lv_obj_set_style_text_color(ui_pageHome_LabelRate40Result, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT); + } + break; + + default: + break; + } + + } }else{ @@ -376,7 +426,7 @@ void uart2_echoTask(void* arg) //lv_label_set_text(ui_pageLung_labelDataFromBS,(char *)data); lv_label_set_text_fmt(ui_pageLung_labelDataFromBS,"%02x %02x %02x %02x %02x %02x %02x %02x",data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7]); - ESP_LOGI("uart2_echoTask", "Read %d bytes: '%s'", len, data); + //ESP_LOGI("uart2_echoTask", "Read %d bytes: '%s'", len, data); } } diff --git a/main/main.cpp b/main/main.cpp index 8867a2a..5e56d86 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -183,13 +183,13 @@ extern "C" void app_main(void) lv_label_set_text(ui_pageHome_labelBSInfo,"wait for test"); lv_label_set_text(ui_pageHome_labelstr21,"--BPM"); - /* 设置测试结果为绿色 */ - lv_obj_set_style_text_color(ui_pageHome_LabelRate15Result, lv_color_hex(0x00FF00), LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_text_color(ui_pageHome_LabelRate20Result, lv_color_hex(0x00FF00), LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_text_color(ui_pageHome_LabelRate25Result, lv_color_hex(0x00FF00), LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_text_color(ui_pageHome_LabelRate30Result, lv_color_hex(0x00FF00), LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_text_color(ui_pageHome_LabelRate35Result, lv_color_hex(0x00FF00), LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_text_color(ui_pageHome_LabelRate40Result, lv_color_hex(0x00FF00), LV_PART_MAIN | LV_STATE_DEFAULT); + /* 设置测试结果为黑色 */ + lv_obj_set_style_text_color(ui_pageHome_LabelRate15Result, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_set_style_text_color(ui_pageHome_LabelRate20Result, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_set_style_text_color(ui_pageHome_LabelRate25Result, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_set_style_text_color(ui_pageHome_LabelRate30Result, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_set_style_text_color(ui_pageHome_LabelRate35Result, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_set_style_text_color(ui_pageHome_LabelRate40Result, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT); /* UDP通讯接口初始化 */ server_addr.sin_addr.s_addr = inet_addr(UDP_HOST_IP);