当前位置: 首页 > news >正文

基于STM32与influxDB的电力监控系统-4

一、目标:

        修复基于STM32与influxDB的电力监控系统-3中的bug

二、问题:

        面切换逻辑和显示逻辑存在一个小的bug。当第四次按下KEY1时,g_current_page会从2变为0(PAGE_DATA),但是显示逻辑没有正确处理这种情况。主要问题在于各个页面的first_display静态变量没有在页面切换时重置。

三、具体修改

/*** @brief       显示数据页面* @param       current_rms: 电流RMS值* @param       voltage_rms: 电压RMS值* @param       current_value: 电流计算值* @param       voltage_value: 电压计算值* @retval      无*/
void display_data_page(float current_rms, float voltage_rms, float current_value, float voltage_value)
{static uint8_t prev_page = 0xFF;  /* 前一个页面 *//* 如果页面发生变化,重新显示静态内容 */if (prev_page != PAGE_DATA){/* 清除数据区域 */lcd_fill(0, 50, 239, 200, WHITE);/* 显示电流传感器信息 */lcd_show_string(30, 60, 200, 12, 12, "CURRENT SENSOR:", BLUE);lcd_show_string(30, 75, 200, 12, 12, "ADC_CH0_RMS:", BLUE);lcd_show_string(30, 90, 200, 12, 12, "CURRENT: 0.000A", BLUE);/* 显示电压传感器信息 */lcd_show_string(30, 110, 200, 12, 12, "VOLTAGE SENSOR:", BLUE);lcd_show_string(30, 125, 200, 12, 12, "ADC_CH1_RMS:", BLUE);lcd_show_string(30, 140, 200, 12, 12, "VOLTAGE: 000.0V", BLUE);/* 显示页面标识 */lcd_show_string(100, 180, 200, 16, 16, "DATA PAGE", RED);prev_page = PAGE_DATA;}/* 显示ADC RMS值 */lcd_fill(102, 75, 150, 87, WHITE);lcd_show_xnum(102, 75, (uint16_t)current_rms, 4, 12, 0, BLUE);lcd_fill(102, 125, 150, 137, WHITE);lcd_show_xnum(102, 125, (uint16_t)voltage_rms, 4, 12, 0, BLUE);/* 显示电流值 */lcd_fill(78, 90, 150, 102, WHITE);if (current_value < 10.0f)  /* 显示格式: X.XXX A */{lcd_show_xnum(78, 90, (uint16_t)current_value, 1, 12, 0, BLUE);   /* 整数部分 */float decimal_current = (current_value - (uint16_t)current_value) * 1000;   /* 小数部分 */lcd_show_xnum(90, 90, (uint16_t)decimal_current, 3, 12, 0X80, BLUE);      /* 小数部分 */lcd_show_string(114, 90, 200, 12, 12, "A", BLUE);}/* 显示电压值 */lcd_fill(78, 140, 150, 152, WHITE);if (voltage_value < 1000.0f)  /* 显示格式: XXX.X V */{lcd_show_xnum(78, 140, (uint16_t)voltage_value, 3, 12, 0, BLUE);    /* 整数部分 */float decimal_voltage = (voltage_value - (uint16_t)voltage_value) * 10;      /* 小数部分 */lcd_show_xnum(102, 140, (uint16_t)decimal_voltage, 1, 12, 0X80, BLUE);      /* 小数部分 */lcd_show_string(114, 140, 200, 12, 12, "V", BLUE);}
}/*** @brief       优化后的波形页面显示* @param       无* @retval      无*/
void display_wave_page_optimized(void)
{static uint8_t prev_page = 0xFF;  /* 前一个页面 *//* 如果页面发生变化,重新显示静态内容 */if (prev_page != PAGE_WAVE){/* 清除波形区域 */lcd_fill(0, 50, 239, 200, WHITE);/* 绘制电流波形区域 */lcd_draw_rectangle(WAVE_OFFSET_X, WAVE_OFFSET_Y, WAVE_OFFSET_X + WAVE_WIDTH, WAVE_OFFSET_Y + WAVE_HEIGHT, BLACK);lcd_show_string(WAVE_OFFSET_X + 5, WAVE_OFFSET_Y + 5, 100, 12, 12, "CURRENT (CH0)", RED);/* 绘制电压波形区域 */lcd_draw_rectangle(WAVE_OFFSET_X, WAVE_OFFSET_Y + WAVE_HEIGHT + 10, WAVE_OFFSET_X + WAVE_WIDTH, WAVE_OFFSET_Y + 2 * WAVE_HEIGHT + 10, BLACK);lcd_show_string(WAVE_OFFSET_X + 5, WAVE_OFFSET_Y + WAVE_HEIGHT + 15, 100, 12, 12, "VOLTAGE (CH1)", GREEN);/* 显示页面标识 */lcd_show_string(100, 190, 200, 16, 16, "WAVE PAGE", RED);prev_page = PAGE_WAVE;}/* 绘制波形 */draw_waveform_optimized(WAVE_OFFSET_X + 2, WAVE_OFFSET_Y + 15, WAVE_WIDTH - 4, WAVE_HEIGHT - 20, g_wave_buffer[0], RED);draw_waveform_optimized(WAVE_OFFSET_X + 2, WAVE_OFFSET_Y + WAVE_HEIGHT + 25, WAVE_WIDTH - 4, WAVE_HEIGHT - 20, g_wave_buffer[1], GREEN);
}/*** @brief       显示FATFS页面* @param       无* @retval      无*/
void display_fatfs_page(void)
{static uint8_t prev_page = 0xFF;  /* 前一个页面 */uint32_t total, free;/* 如果页面发生变化,重新显示静态内容 */if (prev_page != PAGE_FATFS){lcd_fill(0, 50, 239, 200, WHITE);lcd_show_string(30, 60, 200, 16, 16, "FATFS FILE SYSTEM", RED);prev_page = PAGE_FATFS;}/* 获取SD卡容量信息 */if (exfuns_get_free("0", &total, &free) == 0){lcd_show_string(30, 80, 200, 16, 16, "SD Card Status: OK", BLUE);lcd_show_string(30, 100, 200, 16, 16, "SD Total Size:     MB", BLUE);lcd_show_string(30, 120, 200, 16, 16, "SD Free Size:     MB", BLUE);lcd_show_num(30 + 13 * 8, 100, total >> 10, 5, 16, BLUE);   /* 显示SD卡总容量 MB */lcd_show_num(30 + 13 * 8, 120, free >> 10, 5, 16, BLUE);    /* 显示SD卡剩余容量 MB */}else{lcd_show_string(30, 80, 200, 16, 16, "SD Card Status: ERROR", RED);}/* 显示页面标识 */lcd_show_string(100, 180, 200, 16, 16, "FATFS PAGE", RED);
}

四、主要修改内容

  1. 移除了原来的first_display静态变量,改用prev_page来跟踪前一个页面

  2. 添加了页面变化检测:当检测到页面变化时(prev_page != current_page),重新绘制页面的静态内容

  3. 确保每次切换到新页面时都会重新初始化显示,包括第四次按下KEY1回到数据页面时

http://www.dtcms.com/a/416185.html

相关文章:

  • c++字符串类型
  • 优化算法之梯度下降
  • js继承—15
  • 做网站哪家服务器好免费发广告的网站
  • 企业网站优化软件南通网站建设价格
  • 做营销型网站一般要多少钱ios移动网站开发详解 pdf
  • 使用Scade One建模N阶FIR滤波器
  • wordpress回收站在哪里免费的网络推广渠道
  • 基于深度学习模型融合的工业零部件工艺缺陷检测算法有哪些?
  • I2C设备通信失败,逻辑分析仪采集不到信号,或者从机无应答
  • 投资20万做网站好吗网络营销收获与体会
  • 虹口专业网站建设网站备案在外地
  • 栈和队列的算法题
  • 记录一次面经八股学习
  • 盐山县网站建设价格涪城移动网站建设
  • 成都专业做网站的公司做网站类型
  • .net做的网站代码如何做门户网站
  • AI 系统常见攻击类型及核心原理解析
  • 怀化网站优化哪里有wordpress百度xml
  • 17网站一起做网店潮汕做的最好的快餐网站
  • 建立自己的网站视频网站的建设
  • 请人做网站卖东西好吗wordpress分页美化
  • 提高前端开发效率的利器:VUE常用组件及应用
  • 保定建设环境项目网站帝国cms官方网站
  • 公司建设网站记什么费用免费自助建设网站
  • 网站建设有没有资质点击图片进入网站怎么做
  • 重庆网站建设 夹夹虫专业做影评的网站
  • Java-新特性-Record(记录)(jdk>=14)
  • Cookie与Session
  • 机器视觉:基于 Python 的人脸识别与照片管理工具——从检测到整理的全流程实现