debug

Dependencies:   mbed wave_player mbed-rtos 4DGL-uLCD-SE SDFileSystem

heartRate.cpp

Committer:
mbrzozowski3
Date:
2018-12-13
Revision:
2:4789078c7519
Parent:
1:02e619c9b205

File content as of revision 2:4789078c7519:

//#include "mbed.h"
//#include "algorithm.h"
//#include "MAX30102.h"
//#include "uLCD_4DGL.h"
//
//#define MAX_BRIGHTNESS 255
//
//uLCD_4DGL uLCD(p9, p10, p11);
//
//uint32_t aun_ir_buffer[500]; //IR LED sensor data
//int32_t n_ir_buffer_length;    //data length
//uint32_t aun_red_buffer[500];    //Red LED sensor data
//int32_t n_sp02; //SPO2 value
//int8_t ch_spo2_valid;   //indicator to show if the SP02 calculation is valid
//int32_t n_heart_rate;   //heart rate value
//int8_t  ch_hr_valid;    //indicator to show if the heart rate calculation is valid
//uint8_t uch_dummy;
//
//Serial pc(USBTX, USBRX);    //initializes the serial port
//#ifdef TARGET_KL25Z 
//PwmOut led(PTB18);  //initializes the pwm output that connects to the on board LED
//DigitalIn INT(PTD1);  //pin PTD1 connects to the interrupt output pin of the MAX30102
//#endif
//#ifdef TARGET_K64F
//DigitalIn INT(PTD1);  //pin PTD1 connects to the interrupt output pin of the MAX30102
//#endif
//#ifdef TARGET_MAX32600MBED
//PwmOut led(LED_RED);    //initializes the pwm output that connects to the on board LED
//DigitalIn INT(p20);  //pin P20 connects to the interrupt output pin of the MAX30102
//#endif
//
//// the setup routine runs once when you press reset:
//int main() {
//  
//    // Create the original background for the UI design
//    uLCD.filled_circle(61, 63, 59, WHITE);
//    uLCD.filled_circle(61, 63, 53, BLACK);
//    uLCD.filled_circle(61, 63, 36, RED);
//    uLCD.locate(7,2);
//    uLCD.text_mode(TRANSPARENT);
//    uLCD.color(WHITE);
//    uLCD.printf(" HR");
//            
//    uint32_t un_min, un_max, un_prev_data;  //variables to calculate the on-board LED brightness that reflects the heartbeats
//    int i;
//    int32_t n_brightness;
//    float f_temp;
//    DigitalIn INT(p20);
//    
//    maxim_max30102_reset(); //resets the MAX30102
//    // initialize serial communication at 115200 bits per second:
//    pc.baud(9600);
//    pc.format(8,SerialBase::None,1);
//    wait(1);
//    
//    //read and clear status register
//    maxim_max30102_read_reg(0,&uch_dummy);
//    
//    //wait until the user presses a key
//    while(pc.readable()==0)
//    {
//        pc.printf("\x1B[2J");  //clear terminal program screen
//        pc.printf("Press any key to start conversion\n\r");
//        wait(1);
//    }
//    uch_dummy=getchar();
//    
//    maxim_max30102_init();  //initializes the MAX30102
//        
//        
//    n_brightness=0;
//    un_min=0x3FFFF;
//    un_max=0;
//  
//    n_ir_buffer_length=500; //buffer length of 100 stores 5 seconds of samples running at 100sps
//    
//    //read the first 500 samples, and determine the signal range
//    for(i=0;i<n_ir_buffer_length;i++)
//    {
//        while(INT.read()==1);   //wait until the interrupt pin asserts
//        
//        maxim_max30102_read_fifo((aun_red_buffer+i), (aun_ir_buffer+i));  //read from MAX30102 FIFO
//            
//        if(un_min>aun_red_buffer[i])
//            un_min=aun_red_buffer[i];    //update signal min
//        if(un_max<aun_red_buffer[i])
//            un_max=aun_red_buffer[i];    //update signal max
//        pc.printf("red=");
//        pc.printf("%i", aun_red_buffer[i]);
//        pc.printf(", ir=");
//        pc.printf("%i\n\r", aun_ir_buffer[i]);
//    }
//    un_prev_data=aun_red_buffer[i];
//    
//    
//    //calculate heart rate and SpO2 after first 500 samples (first 5 seconds of samples)
//    maxim_heart_rate_and_oxygen_saturation(aun_ir_buffer, n_ir_buffer_length, aun_red_buffer, &n_sp02, &ch_spo2_valid, &n_heart_rate, &ch_hr_valid); 
//    
//    //Continuously taking samples from MAX30102.  Heart rate and SpO2 are calculated every 1 second
//    while(1)
//    {
//        i=0;
//        un_min=0x3FFFF;
//        un_max=0;
//        
//        //dumping the first 100 sets of samples in the memory and shift the last 400 sets of samples to the top
//        for(i=100;i<500;i++)
//        {
//            aun_red_buffer[i-100]=aun_red_buffer[i];
//            aun_ir_buffer[i-100]=aun_ir_buffer[i];
//            
//            //update the signal min and max
//            if(un_min>aun_red_buffer[i])
//            un_min=aun_red_buffer[i];
//            if(un_max<aun_red_buffer[i])
//            un_max=aun_red_buffer[i];
//        }
//        
//        //take 100 sets of samples before calculating the heart rate.
//        for(i=400;i<500;i++)
//        {
//            un_prev_data=aun_red_buffer[i-1];
//            while(INT.read()==1);
//            maxim_max30102_read_fifo((aun_red_buffer+i), (aun_ir_buffer+i));
//        
//            if(aun_red_buffer[i]>un_prev_data)
//            {
//                f_temp=aun_red_buffer[i]-un_prev_data;
//                f_temp/=(un_max-un_min);
//                f_temp*=MAX_BRIGHTNESS;
//                n_brightness-=(int)f_temp;
//                if(n_brightness<0)
//                    n_brightness=0;
//            }
//            else
//            {
//                f_temp=un_prev_data-aun_red_buffer[i];
//                f_temp/=(un_max-un_min);
//                f_temp*=MAX_BRIGHTNESS;
//                n_brightness+=(int)f_temp;
//                if(n_brightness>MAX_BRIGHTNESS)
//                    n_brightness=MAX_BRIGHTNESS;
//            }
//#if defined(TARGET_KL25Z) || defined(TARGET_MAX32600MBED)
//            led.write(1-(float)n_brightness/256);
//#endif
//            //send samples and calculation result to terminal program through UART
//            pc.printf("red=");
//            pc.printf("%i", aun_red_buffer[i]);
//            pc.printf(", ir=");
//            pc.printf("%i", aun_ir_buffer[i]);
//            pc.printf(", HR=%i, ", n_heart_rate); 
//            pc.printf("HRvalid=%i, ", ch_hr_valid);
//            pc.printf("SpO2=%i, ", n_sp02);
//            pc.printf("SPO2Valid=%i\n\r", ch_spo2_valid);
//        }
//        maxim_heart_rate_and_oxygen_saturation(aun_ir_buffer, n_ir_buffer_length, aun_red_buffer, &n_sp02, &ch_spo2_valid, &n_heart_rate, &ch_hr_valid); 
//        
//                        uLCD.textbackground_color(DGREY);
//                        uLCD.color(BLACK);
//                        uLCD.locate (7, 11);
//                        uLCD.locate (8, 13);
//                        uLCD.text_mode(OPAQUE);
//                        uLCD.textbackground_color(BLACK);
//                        uLCD.printf ("--");
//                        uLCD.text_mode(TRANSPARENT);
//                        uLCD.color(WHITE);
//                            uLCD.locate (6, 7);
//                            uLCD.text_width(2);
//                            uLCD.text_height(2);
//                            uLCD.text_mode(OPAQUE);
//                            uLCD.textbackground_color(RED);
//                            uLCD.filled_circle(61, 63, 36, RED);
//                            uLCD.printf("%i", n_heart_rate);
//                            uLCD.text_mode(TRANSPARENT);
//                            uLCD.text_width(1);
//                            uLCD.text_height(1);
//                        wait(0.5);
//    }
//}
//