HRM with LPC1768, calculating the BPM and communicating with bluetooth

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers HRM.cpp Source File

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  }