使用STM32和Max30102传感器测量心率和血氧饱和度
主要功能
测量血氧和心率数值并实时显示在一块OLED屏幕上,可设置测量值的报警范围,实现对心率血氧异常测量值的报警功能。
物料清单
PCB
实物图
程序编写
驱动程序主要参考淘宝店家给的例程:myiic.c max30102.c algorithm.c。
#include "stm32f10x.h"
#include "SysTick.h"
#include "timer.h"
#include "string.h"
#include "oled.h"
#include "delay.h"
#include "key.h"
#include "stdio.h"
#include "BUZZ.h"
#include "max30102.h"
Tim Tim2_T;
DELAY_t DELAY_T;
key_t Key_T;
Menu_t Menu_T;
vu8 Timer0_start;
u8 shijian;
u8 Times;
timer_t Timer4_T;
extern const char xin_lv[];
extern const char xue_yang[];
extern const char xin_lv_ce_shi_yi[];
extern const char shu_zhi[];
extern const char yu_zhi[];
int main(void)
{
NVIC_Configuration(); //中断管理程序
SysTick_Init_Config(); //系统时钟管理
delay_init(); //延时函数初始化
Timer2_Init_Config(7199, 9999); //1s进一次中断
TIM4_Int_Init(9,7199); //定时器按键扫描
Key_Init(); //按键初始化
BUZZ_INIT(); //蜂鸣器初始化
OLED_Init(); //液晶屏初始化
OLED_Clear(); //液晶屏清屏幕
OLED_Show_Chinese(34, 0, shu_zhi, 2); // 液晶屏显示“数值”
OLED_Show_Chinese(80, 0, yu_zhi, 2); //液晶屏显示“阈值”
OLED_Show_Chinese(0, 3, xin_lv, 2); //液晶屏显示“心率”
OLED_Show_Chinese(0, 5, xue_yang, 2); //液晶屏显示"血氧"
LCD_DISPLAY_HR_SPO2(); //在液晶上显示初试的心率和血氧
LCD_DISPLAY_HR_THRESHOLD(); //在液晶上显示设置的阈值
max30102_init(); //血氧模块初始化
while(1) //进入循环
{
key_action();//按键检测处理程序
MAX30102_READ_HEART_RATE();//读取血氧和心率,并在液晶上显示,如果心率超过阈值,则报警
ALARM_BUZZ();//如果血氧超过阈值,则报警
if(Tim2_T._1s_Flag == 1)//1S中周期进程
{
Tim2_T._1s_Flag = 0;
LCD_DISPLAY_HR_THRESHOLD();//液晶内容更新
}
}
}
作者:划水cc