Changes done in ECG and BT

Dependencies:   SDFileSystem ds3231 eeprom_Nikita mbed testUniGraphic_150217

Fork of merged_code2_20sept_2017_4th_oct_2017 by nikita teggi

bp.cpp

Committer:
nikitateggi
Date:
2017-02-10
Revision:
3:9a06c2bed650
Child:
5:a3ea7c82b7e1

File content as of revision 3:9a06c2bed650:

//BP Optimised Program for Averaging the received value from PPG and ECG & Check for SD card Storage//


/** ECG ADS1291 Test program.
ADS1291 is a single channel ECG chip
with a 24 bit Sigma-Delta ADC
 */
 
#include "mbed.h"
#include "MAX30102.h" // BP ADD
#include <string.h>
#include <stdio.h>
#include "ds3231.h"
#include "SDFileSystem.h"
#include "rtc.h"
#include "sdcard.h"
#include "ec_bp.h"
#include "bp.h"
#include "display_modules.h"


Serial bc(USBTX,USBRX);
DigitalIn INTR(PTC7);

 
    
int bp() {
 
//------------------BP ADD------------------------------//{ 
int location; // BP ADD
int32_t n_red_buffer_length = 1500;    //data length
uint32_t aun_red_buffer[1500];    //Red LED sensor data, set to 500
uint32_t red_value;
uint32_t ecg_value;
uint8_t uch_dummy;
uint32_t ecg_buf[1000];
int32_t ecg_buffer_length = 1000;
float SBP, DBP, PWV, delta_t;
int d = 210;

uint32_t un_min, un_max, un_prev_data, ecg_min, ecg_max ;  //variables to calculate the on-board LED brightness that reflects the heartbeats
    int i, j;
    float ecg_location, ppg_location; 
    int32_t n_brightness;
    
    n_brightness=0;
    un_min=0x3FFFF;
    un_max=0;
    ecg_min = 0xFFFFFF;
    ecg_max = 0;
 //---------------- BP ADD-----------------------------//}
 
 
 //time_t epoch_time;
  //int fp;
 int concatenate_value1 = 0;
//uint32_t ecg_buf[1500];
//int32_t ecg_der[1500];
//int buff1[15]= {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int32_t sample_sum; // static int32_t avg[1500];
 int32_t count = 0; int32_t fs = 500; int32_t w=0,w1=0;

   unsigned char chk = 1;
    bc.baud(baud_rate);
   // mySpi.frequency(freq) ;
   // mySpi.format(bits, mode) ; 
 freqset();
  //  Ds3231 rtc(PTC11, PTC10); //sda,scl2yy
   
   //------------------BP ADD---------------------------// {
    while(bc.readable()==0)
    {
        bc.printf("\x1B[2J");  //clear terminal program screen
        bc.printf("Press any key to start conversion\n\r");
        wait(1);
    }
  wait(5);
  bc.printf("Start of capture, Remain CALM and Donot MOVE\n");  
  wait(2);
  //-------------------BP ADD---------------------------//}
    
  setupfunc();
  ecgsetupfunc(); 
  //--------------- BP ADD------------------------------------//{
  maxim_max30102_reset();  // PPG reset
  maxim_max30102_init(); // PPG ADC register Initialise 
  //---------------BP ADD ----------------------------------// }  
  
 
   chk = 1;
 bc.printf("rawecg......................\n");
 for(int i=0; i<N_ECG; i++)
 {
    
     concatenate_value1=readvalue();
    ecg_buf[i] = concatenate_value1;
   
    bc.printf( "%d\n", concatenate_value1);
    maxim_max30102_read_reg(0,&uch_dummy);
    while(INTR.read()==1); 
    maxim_max30102_read_fifo((aun_red_buffer+i)); 
     //bc.printf( "%d\n", concatenate_value1);
      // bc.printf("%d\n",aun_red_buffer[i]);
    //sd_write(concatenate_value); - -- BP ADD commented
    //printf( "%d\n", concatenate_value); -- BP ADD commented
    // bc.printf("loop2");
    }
    
  for (int w=1000; w < n_red_buffer_length; w++)  // for reading extra 500 PPG samples.
  {
 //bc.printf("loop2");
  while(INTR.read()==1);
  maxim_max30102_read_fifo((aun_red_buffer+w));
  } 


   //sd_close();  -- BP ADD commented
   
   int32_t ecg_n_denom;

 // 4 pt Moving Average ECG
    bc.printf("PRINTING ECG 4 POINT IN DECIMAL........\n");
    for(int y=0; y<996; y++){
        ecg_n_denom= ( ecg_buf[y]+ ecg_buf[y+1]+ ecg_buf[y+2]+ ecg_buf[y+3]);
        ecg_buf[y]=  ecg_n_denom/(int32_t)4;
    }
    for( int l= 0; l<1000; l++){
    bc.printf("%d\n",ecg_buf[l]); //PRINTING ecg AFTER AVERAGING
    }
bc.printf("PRINTING PPG IN DECIMAL (after averaging)........\n");
int32_t ppg_n_denom;
  // 4 pt Moving Average PPG
    for(int f=0; f<1496; f++){
        ppg_n_denom= ( aun_red_buffer[f]+aun_red_buffer[f+1]+ aun_red_buffer[f+2]+ aun_red_buffer[f+3]);
        aun_red_buffer[f]= ppg_n_denom/(int32_t)4;
    }
    for( int b = 0; b<1500; b++){
       bc.printf("%d\n",aun_red_buffer[b]);
    }
    

for(int f=0; f<ecg_buffer_length; f++)
   {
       if(ecg_min > ecg_buf[f])
           ecg_min = ecg_buf[f];    //update signal min
        if(ecg_max < ecg_buf[f])
        {
            ecg_max=ecg_buf[f];    //update signal max
            ecg_location = f+1;
    }
    }
    bc.printf( "ecg_location = %f\n", ecg_location);

for(int g = ecg_location;  g < (ecg_location+400); g++) // Peak detect changed to 400 samples from 500 samples
    {
       if(un_min>aun_red_buffer[g])
           un_min=aun_red_buffer[g];    //update signal min
        if(un_max<aun_red_buffer[g])
        {
            un_max=aun_red_buffer[g];    //update signal max
            ppg_location = g+1;
    }
    }
bc.printf( "ppg_location = %f\n", ppg_location);

delta_t = (2*(ppg_location - ecg_location))/1000;
bc.printf( "delta_t = %f\n", delta_t);

PWV = d/delta_t;
bc.printf( "PWV = %f\n", PWV);

SBP = 0.0508955*PWV+62.559;
DBP = 0.0494*PWV + 17.480;


bc.printf( "SBP = %f\n", SBP);
bc.printf( "DBP = %f\n", DBP);

screen_bp1(SBP,DBP);


//-----------------WRITE ECG &PPG
   
sd_open_BPfile(1);
for (int w=0; w < 1000; w++)
{
ecg_value =  ecg_buf[w];   
sd_write(ecg_value);
}



for (int w=0; w < n_red_buffer_length; w++)
{
red_value =  aun_red_buffer[w];   
sd_write(red_value); 
}
sd_close();

//----------- FINISHED WRITING ECG & PPG TO SD CARD

   

        
 }    // End of main function