關於MAX30100心率的程式設計

2022-08-23 10:48:08 字數 2344 閱讀 1599

max30100是能夠讀取心率、血氧的感測器,通訊方式是通過iic進行通訊。

其工作原理是通過紅外led燈照射,能夠得到心率的adc值。

圖為max30100的暫存器。

可以分為五類,狀態暫存器、fifo、控制暫存器、溫度暫存器、id暫存器。

溫度暫存器是讀取晶元的溫度值,以矯正因為溫度而產生的偏差。

id暫存器是讀取晶元的id號。

重點在於另外三類暫存器。

status暫存器

其中,status暫存器有兩個,乙個是中斷狀態暫存器,乙個是中斷使能暫存器。  

例如,當你使能了心率中斷,當心率轉換結束時,其狀態位就會置1。

fifo暫存器

資料儲存在fifo_data暫存器,我們主要去讀取他就可以了。其餘三個是溢位次數以及讀寫指標。

data存的資料是每次讀到的adc值。每一次會讀四次,依次是ir的高低資料、red的高低資料。

configured暫存器

mode暫存器中 shdn是低功耗控制位、reset是復位、temp_en是溫度檢測使能,mode是模式選擇。

spo2設定暫存器 主要是設定血氧濃度相關的引數的,以及led_pw的功率。

led暫存器是設定兩顆燈的脈衝時間。

程式編寫

首先要對max30100進行初始化配置。

max30100_write(0x06,0x0b);        //

設定模式

max30100_write(0x01,0xf0); //

開啟中斷

max30100_write(0x09,0x33); //

led設定

max30100_write(0x07,0x43

);     

max30100_write(

0x02,0x00); //

set fifo write pointer reg = 0x00 for clear it

max30100_write(0x03,0x00); //

set over flow counter reg = 0x00 for clear it

max30100_write(0x04,0x00); //

set fifo read pointer reg = 0x00 for clear it

然後在迴圈裡讀取max30100的中斷狀態暫存器,查詢心率中斷是否置位

init_flag=max30100_read(max_reg_init_stat_add);

if(init_flag==0x20

) {

max30100_buff_read(buf);

max30100_write(

0x02, 0x00); //

set fifo write pointer reg = 0x00 for clear it

max30100_write(0x03, 0x00); //

set over flow counter reg = 0x00 for clear it

max30100_write(0x04, 0x00); //

set fifo read pointer reg = 0x00 for clear it

ir_value=buf[0]*256+buf[1

]; red_value=buf[2]*256+buf[3];

既可以得到心率的adc值。

再通過相關演算法(如檢測其峰值間隔時間)既可以得出心率

關於MAX30100心率的程式設計

max30100是能夠讀取心率 血氧的感測器,通訊方式是通過iic進行通訊。其工作原理是通過紅外led燈照射,能夠得到心率的adc值。圖為max30100的暫存器。可以分為五類,狀態暫存器 fifo 控制暫存器 溫度暫存器 id暫存器。溫度暫存器是讀取晶元的溫度值,以矯正因為溫度而產生的偏差。id暫...

關於group by 和max函式一起使用的坑

前幾天去參加一場面試,面試過程中有被問到乙個sql語句的問題,很遺憾沒有回答上來,結果一面直接掛 問完這個問題後,當我聽到面試官對我說 你有什麼想問我的嗎?我的內心一片涼涼 其實面試官問的問題聽起來很簡單,一張劇目演出表,表中有 劇目id,劇目名稱,演出單位,票房 問 查詢出每個演出單位票房最高的劇...

關於MAX部分快捷鍵失效的問題分析

情況 可編輯網格 editable mesh 和 可編輯多邊形物件 editable poly 上的一些命令失效,比如分離 detach 反轉 flip 快速切片 quickslice 等等 原因,這些鍵盤按鍵針對不同的物件型別重複設定了快捷命令,比如shift d組合鍵在應用給可編輯器樣條線物件為...