stm32 + ads1292心率检测报警设置上下限

06-01 1477阅读

        这个项目是在做心率检测的时候一个小伙伴提出来的,今年五一的时候提出来的想法,五一假期的时候没时间,也没心情做这个,就把这个事情搁置了,在月中做工作计划的时候,就把这个小项目排进来了,五一前做了硬件,程序一直没时间调试。正好其他项目做的不顺利,就搞一搞这种小玩意。

项目需求: 1、ads1292检测心率,在tft屏幕上显示波形和心率数值。

                   2、通过三个按键来设置心率范围,并在tft屏幕上显示

                   3、心率范围超过设置范围,蜂鸣器发生警报。

硬件:         1、单片机:stm32f103c8

                    2、ads1292 心率检测模块

                    3、心电信号发生器 

  单片机底板自己做的板子,ads1292模块和心电信号发生器均为芯科电子的。

ads1292检测模块:ads1292模块

心电发生器:心电信号发生器

整体效果

stm32 + ads1292心率检测报警设置上下限

        整体程序写起来并不难,但断断续续也花了一天时间,按键逻辑和检测逻辑不难,反而是TFT显示部分的逻辑混乱了,该清屏的时候没有清掉,按键逻辑跟清屏逻辑冲突,导致按对应的按键显示的跟预期不一样。

设置界面

stm32 + ads1292心率检测报警设置上下限

黄色字体部分为设置参数,分别设置心率的最大和最小值,通过最大最小值来改变检测范围。

设置界面主要是三个按键,一个设置按键,一个数值增加,一个数值减小。

stm32 + ads1292心率检测报警设置上下限

程序中通过轮询来不断检测按键状态,就可以判断对应的电平。

这是设置按键的处理函数,其他按键处理方式相同,只需要改成对应按键即可。

	// 检测SET_KEY上升沿(从低到高)
    if(set_key_state && !set_key_last_state)
    {
        // 延时消抖
        delay_ms(20);
        if(SET_KEY)
        {
            // 处理SET_KEY按下事件
            if(current_mode == NORMAL_MODE)
            {
                // 从正常模式进入设置模式(设置上限)
                Enter_SetMode();
            }
            else if(current_mode == SET_UPPER_MODE)
            {
                // 从设置上限模式切换到设置下限模式
                current_mode = SET_LOWER_MODE;
                flash_flag = 1; 
                Update_SetDisplay();
            }
            else if(current_mode == SET_LOWER_MODE)
            {
                // 从设置下限模式保存设置并返回正常模式
                Save_Setting();
                current_mode = NORMAL_MODE;
                Update_SetDisplay();
            }
        }
    }

报警部分

报警部分主要是硬件电路,就是一个蜂鸣器,软件上主要是结合检测部分,做电平反转就可以了。stm32 + ads1292心率检测报警设置上下限

这部分主要是体现在检测心率的函数里

void Check_HeartRate(void)
{
    if(heart_rate > 0) // 确保心率值有效
    {
        if(heart_rate  hr_upper_limit)
        {
            // 心率超出范围,触发报警
            if(!alarm_triggered)
            {
                alarm_triggered = 1;
                buzz_tick = sys_tick;
                buzz_state = 1;
                BUZZER = 1;
                
              
            }
        }
        else
        {
            // 心率在正常范围内,解除报警
            if(alarm_triggered)
            {
                alarm_triggered = 0;
                BUZZER = 0;
                
                // 清除报警信息
                LCD_Fill(10,190,100,214,BLACK);
            }
        }
    }
}

   调试的时候用的是心电信号发生器,这个发生器心率范围可以在60-120bpm之间任意设置,就可以在心率心率范围外进行心率测试,当心率超过设置范围,蜂鸣器就会发生警报报警。

stm32 + ads1292心率检测报警设置上下限

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码