ZHAOYU XIANG
/
HRM
HRM
HRM.cpp@0:58ea8e70a8d8, 2022-07-31 (annotated)
- 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?
User | Revision | Line number | New 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 | } |