HRM with LPC1768, calculating the BPM and communicating with bluetooth
Embed:
(wiki syntax)
Show/hide line numbers
HRM.cpp
00001 #include "mbed.h" 00002 #include "HRM.h" 00003 00004 00005 float data =3.3; 00006 float previous_data =0; 00007 int count1= 0; 00008 00009 int main(void){ 00010 00011 bt.baud(9600); 00012 int count1 = 0; 00013 float time_perhb; 00014 bt.printf("Analyse signal\n\r"); 00015 00016 float samples[2048]; 00017 float adc_value; 00018 float *p =samples; 00019 for(int i = 0; i<2048;i++){ 00020 adc_value = sensor.read()* 3.3; 00021 *(p+i) = adc_value ; 00022 wait_ms(1); 00023 } 00024 00025 float max = Get_Array_Max(samples,2048); 00026 float min = Get_Array_Min(samples,2048); 00027 float maxrate = Get_MaxRate(samples,2048); 00028 float threshold = (max - min)*0.7+ min; 00029 00030 int BPM; 00031 int swi = 1; 00032 bool firstcircle = true; 00033 00034 while(1){ 00035 //swi = bt.getc(); 00036 if(swi == 1){ 00037 bt.printf("max = %f\n",max); 00038 bt.printf("min = %f\n",min); 00039 bt.printf("maxrate = %f\n",maxrate); 00040 bt.printf("threshold = %f\n",threshold); 00041 00042 while(swi == 1){ 00043 previous_data = data; 00044 data = sensor.read()*3.3; 00045 00046 if(data>=threshold && previous_data<threshold){ 00047 if(firstcircle){ 00048 count1 = 0; 00049 firstcircle = false; 00050 } 00051 else{ 00052 if(count1 >20){ 00053 00054 if((data - previous_data)/0.005 < maxrate * 0.7 && count1<100 ){ 00055 bt.printf("Find error point,removed!\n"); 00056 count1++; 00057 wait(0.005); 00058 } 00059 else{ 00060 time_perhb = count1 * 0.005; 00061 BPM = 60/time_perhb; 00062 00063 if(BPM<200&&BPM>30){ 00064 bt.printf("BPM=%d\n", BPM); 00065 } 00066 count1 = 0; 00067 wait(0.005); 00068 } 00069 } 00070 00071 } 00072 00073 } 00074 else{ 00075 count1++; 00076 wait(0.005); 00077 } 00078 } 00079 } 00080 } 00081 }
Generated on Sat Sep 10 2022 01:22:22 by
1.7.2