HRM

Dependencies:   mbed

Committer:
2675375x
Date:
Sun Jul 31 20:19:02 2022 +0000
Revision:
0:58ea8e70a8d8
HRM with LPC1768,calculating the BPM and communicating with Android by bluetooth

Who changed what in which revision?

UserRevisionLine numberNew contents of line
2675375x 0:58ea8e70a8d8 1 #include "mbed.h"
2675375x 0:58ea8e70a8d8 2 #include "HRM.h"
2675375x 0:58ea8e70a8d8 3
2675375x 0:58ea8e70a8d8 4
2675375x 0:58ea8e70a8d8 5 float data =3.3;
2675375x 0:58ea8e70a8d8 6 float previous_data =0;
2675375x 0:58ea8e70a8d8 7 int count1= 0;
2675375x 0:58ea8e70a8d8 8
2675375x 0:58ea8e70a8d8 9 int main(void){
2675375x 0:58ea8e70a8d8 10
2675375x 0:58ea8e70a8d8 11 bt.baud(9600);
2675375x 0:58ea8e70a8d8 12 int count1 = 0;
2675375x 0:58ea8e70a8d8 13 float time_perhb;
2675375x 0:58ea8e70a8d8 14 bt.printf("Analyse signal\n\r");
2675375x 0:58ea8e70a8d8 15
2675375x 0:58ea8e70a8d8 16 float samples[2048];
2675375x 0:58ea8e70a8d8 17 float adc_value;
2675375x 0:58ea8e70a8d8 18 float *p =samples;
2675375x 0:58ea8e70a8d8 19 for(int i = 0; i<2048;i++){
2675375x 0:58ea8e70a8d8 20 adc_value = sensor.read()* 3.3;
2675375x 0:58ea8e70a8d8 21 *(p+i) = adc_value ;
2675375x 0:58ea8e70a8d8 22 wait_ms(1);
2675375x 0:58ea8e70a8d8 23 }
2675375x 0:58ea8e70a8d8 24
2675375x 0:58ea8e70a8d8 25 float max = Get_Array_Max(samples,2048);
2675375x 0:58ea8e70a8d8 26 float min = Get_Array_Min(samples,2048);
2675375x 0:58ea8e70a8d8 27 float maxrate = Get_MaxRate(samples,2048);
2675375x 0:58ea8e70a8d8 28 float threshold = (max - min)*0.7+ min;
2675375x 0:58ea8e70a8d8 29
2675375x 0:58ea8e70a8d8 30 int BPM;
2675375x 0:58ea8e70a8d8 31 int swi = 1;
2675375x 0:58ea8e70a8d8 32 bool firstcircle = true;
2675375x 0:58ea8e70a8d8 33
2675375x 0:58ea8e70a8d8 34 while(1){
2675375x 0:58ea8e70a8d8 35 //swi = bt.getc();
2675375x 0:58ea8e70a8d8 36 if(swi == 1){
2675375x 0:58ea8e70a8d8 37 bt.printf("max = %f\n",max);
2675375x 0:58ea8e70a8d8 38 bt.printf("min = %f\n",min);
2675375x 0:58ea8e70a8d8 39 bt.printf("maxrate = %f\n",maxrate);
2675375x 0:58ea8e70a8d8 40 bt.printf("threshold = %f\n",threshold);
2675375x 0:58ea8e70a8d8 41
2675375x 0:58ea8e70a8d8 42 while(swi == 1){
2675375x 0:58ea8e70a8d8 43 previous_data = data;
2675375x 0:58ea8e70a8d8 44 data = sensor.read()*3.3;
2675375x 0:58ea8e70a8d8 45
2675375x 0:58ea8e70a8d8 46 if(data>=threshold && previous_data<threshold){
2675375x 0:58ea8e70a8d8 47 if(firstcircle){
2675375x 0:58ea8e70a8d8 48 count1 = 0;
2675375x 0:58ea8e70a8d8 49 firstcircle = false;
2675375x 0:58ea8e70a8d8 50 }
2675375x 0:58ea8e70a8d8 51 else{
2675375x 0:58ea8e70a8d8 52 if(count1 >20){
2675375x 0:58ea8e70a8d8 53
2675375x 0:58ea8e70a8d8 54 if((data - previous_data)/0.005 < maxrate * 0.7 && count1<100 ){
2675375x 0:58ea8e70a8d8 55 bt.printf("Find error point,removed!\n");
2675375x 0:58ea8e70a8d8 56 count1++;
2675375x 0:58ea8e70a8d8 57 wait(0.005);
2675375x 0:58ea8e70a8d8 58 }
2675375x 0:58ea8e70a8d8 59 else{
2675375x 0:58ea8e70a8d8 60 time_perhb = count1 * 0.005;
2675375x 0:58ea8e70a8d8 61 BPM = 60/time_perhb;
2675375x 0:58ea8e70a8d8 62
2675375x 0:58ea8e70a8d8 63 if(BPM<200&&BPM>30){
2675375x 0:58ea8e70a8d8 64 bt.printf("BPM=%d\n", BPM);
2675375x 0:58ea8e70a8d8 65 }
2675375x 0:58ea8e70a8d8 66 count1 = 0;
2675375x 0:58ea8e70a8d8 67 wait(0.005);
2675375x 0:58ea8e70a8d8 68 }
2675375x 0:58ea8e70a8d8 69 }
2675375x 0:58ea8e70a8d8 70
2675375x 0:58ea8e70a8d8 71 }
2675375x 0:58ea8e70a8d8 72
2675375x 0:58ea8e70a8d8 73 }
2675375x 0:58ea8e70a8d8 74 else{
2675375x 0:58ea8e70a8d8 75 count1++;
2675375x 0:58ea8e70a8d8 76 wait(0.005);
2675375x 0:58ea8e70a8d8 77 }
2675375x 0:58ea8e70a8d8 78 }
2675375x 0:58ea8e70a8d8 79 }
2675375x 0:58ea8e70a8d8 80 }
2675375x 0:58ea8e70a8d8 81 }