• 欢迎大家分享资料!前往留言板评论即可!

LUAT实现心率检测MAX30102

合宙 模组资料网 2年前 (2021-05-15) 390次浏览 0个评论 扫描二维码

我用的是EVB_Air724UG_A13开发板, 模块是之前在某宝买的MAX30102模块。接上SDL,SDA,VCC,GND,开始撸代码。

图片.png

1、开始对MAX30102进行初始化

local function maxm_max30102_init()

if i2c.setup(i2cid,i2c.FAST,i2cslaveaddr) ~= i2c.FAST then
        log.info("i2cfail")
return
end
    log.info("i2copen", "max30102")
    log.info("max30102ID", string.byte(maxim_max30102_read_reg(0xFF,1),1))


--中断使能寄存器
    maxim_max30102_write_reg(0x02,0xC0) --FIFO满中断 FIFO 读就绪中断
    maxim_max30102_write_reg(0x03,0x00)

--FIFO  读写溢出计数指针清理
    maxim_max30102_write_reg(0x04,0x00) --WR COUNT
    maxim_max30102_write_reg(0x05,0x00) --OVF COUNT
    maxim_max30102_write_reg(0x06,0x00) --RD COUNT

--FIFO CONFIG
    maxim_max30102_write_reg(0x08,0x0F) --平均值1,不覆盖,剩余15中断触发
--MODE CONFIG
    maxim_max30102_write_reg(0x09,0x03) --SPO2 模式 RED AND IR
--SPO2 CONFIG
    maxim_max30102_write_reg(0x0A,0x27) --SPO2_ADC range = 4096nA  SPO2 sample rate (100 Hz), LED pulseWidth (400uS)18BAT

    maxim_max30102_write_reg(0x0C,0x34) --Choose value for ~ 7mA for LED1
    maxim_max30102_write_reg(0x0D,0x34) --Choose value for ~ 7mA for LED2
    maxim_max30102_write_reg(0x10,0x7F) --Choose value for ~ 25mA for Pilot LED

end

2、读取中断数据,对数据进行保存

function maxim_max30102_read_fifo()
local intt = maxim_max30102_read_reg(0x00,2) --清除中断
local cnt = maxim_max30102_read_reg(0x04,3)
local num = cnt:byte(1) - cnt:byte(3)
if num <= 0 then num = num + 32 end
    num = num * 6
local readdata = maxim_max30102_read_reg(0x07,num)
--    log.info("max30102",cnt:byte(1),cnt:byte(2),cnt:byte(3),string.len(readdata),intt:byte(1))
if cnt:byte(2) > 0 then log.info("cnt", cnt:byte(2)) end
for i = 1, num, 6 do
        reddatatemp = bit03(string.byte(readdata,i))
        reddatatemp = reddatatemp * 256
        reddatatemp = reddatatemp + string.byte(readdata,i+1)
        reddatatemp = reddatatemp * 256
        reddatatemp = reddatatemp + string.byte(readdata,i+2)

        irdatatemp = bit03(string.byte(readdata,i+3))
        irdatatemp = irdatatemp * 256
        irdatatemp = irdatatemp + string.byte(readdata,i+4)
        irdatatemp = irdatatemp * 256
        irdatatemp = irdatatemp + string.byte(readdata,i+5)


if datacut > 500 then
            table.remove(myreddata,1)
            table.remove(myirdata,1)
            table.insert(myreddata,reddatatemp)
            table.insert(myirdata,irdatatemp)

else
            myreddata[datacut] = reddatatemp
            myirdata[datacut] = irdatatemp
            datacut = datacut + 1

end
end
end

3、对数据进行分析,得出心率值

hr =  algorithm.HeartRateAndOxygen(myreddata,myirdata)
log.info("max30102:", hr);

完美完成!!!

转载请注明原文链接:LUAT实现心率检测MAX30102
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址