Added 4 point or 8 point averaging function .

Dependencies:   SDFileSystem ds3231 eeprom_Nikita mbed testUniGraphic_150217

Fork of merged_code2_3rd_nov_2017 by nikita teggi

Revision:
3:9a06c2bed650
Child:
5:a3ea7c82b7e1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bp.cpp	Fri Feb 10 10:39:13 2017 +0000
@@ -0,0 +1,205 @@
+//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