ZHAOYU XIANG
/
HRM
HRM
HRM.cpp
- Committer:
- 2675375x
- Date:
- 2022-07-31
- Revision:
- 0:58ea8e70a8d8
File content as of revision 0:58ea8e70a8d8:
#include "mbed.h" #include "HRM.h" float data =3.3; float previous_data =0; int count1= 0; int main(void){ bt.baud(9600); int count1 = 0; float time_perhb; bt.printf("Analyse signal\n\r"); float samples[2048]; float adc_value; float *p =samples; for(int i = 0; i<2048;i++){ adc_value = sensor.read()* 3.3; *(p+i) = adc_value ; wait_ms(1); } float max = Get_Array_Max(samples,2048); float min = Get_Array_Min(samples,2048); float maxrate = Get_MaxRate(samples,2048); float threshold = (max - min)*0.7+ min; int BPM; int swi = 1; bool firstcircle = true; while(1){ //swi = bt.getc(); if(swi == 1){ bt.printf("max = %f\n",max); bt.printf("min = %f\n",min); bt.printf("maxrate = %f\n",maxrate); bt.printf("threshold = %f\n",threshold); while(swi == 1){ previous_data = data; data = sensor.read()*3.3; if(data>=threshold && previous_data<threshold){ if(firstcircle){ count1 = 0; firstcircle = false; } else{ if(count1 >20){ if((data - previous_data)/0.005 < maxrate * 0.7 && count1<100 ){ bt.printf("Find error point,removed!\n"); count1++; wait(0.005); } else{ time_perhb = count1 * 0.005; BPM = 60/time_perhb; if(BPM<200&&BPM>30){ bt.printf("BPM=%d\n", BPM); } count1 = 0; wait(0.005); } } } } else{ count1++; wait(0.005); } } } } }