export test

Dependencies:   SDFileSystem ds3231 eeprom_Nikita mbed testUniGraphic_150217

Fork of Int_Demo_09May2017_Suhasini_HRavg_Nikita_ili9341 by nikita teggi

Committer:
suhasini
Date:
Sat May 27 05:47:55 2017 +0000
Revision:
13:5d3b478ea9c7
Parent:
4:6bd81bb1790d
Child:
14:f5c62d30c6fc
This code has ECG functionality with HRD calculation, BP, BG, new display

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nikitateggi 1:8316c23ec6b9 1 /** ECG ADS1291 Test program.
nikitateggi 1:8316c23ec6b9 2 ADS1291 is a single channel ECG chip
nikitateggi 1:8316c23ec6b9 3 with a 24 bit Sigma-Delta ADC
nikitateggi 1:8316c23ec6b9 4 */
nikitateggi 1:8316c23ec6b9 5
nikitateggi 1:8316c23ec6b9 6 #include "mbed.h"
nikitateggi 1:8316c23ec6b9 7 #include <string.h>
nikitateggi 1:8316c23ec6b9 8 #include <stdio.h>
nikitateggi 1:8316c23ec6b9 9 #include "ds3231.h"
nikitateggi 1:8316c23ec6b9 10 #include "SDFileSystem.h"
nikitateggi 1:8316c23ec6b9 11 #include "ecg_dec.h"
nikitateggi 1:8316c23ec6b9 12 #include "rtc.h"
nikitateggi 1:8316c23ec6b9 13 #include "sdcard.h"
nikitateggi 3:9a06c2bed650 14 #include "ec_bp.h"
nikitateggi 3:9a06c2bed650 15 Serial pc(USBTX,USBRX);
nikitateggi 1:8316c23ec6b9 16
nikitateggi 1:8316c23ec6b9 17
nikitateggi 1:8316c23ec6b9 18
suhasini 13:5d3b478ea9c7 19 float ecg(int pid)
nikitateggi 3:9a06c2bed650 20 {
nikitateggi 1:8316c23ec6b9 21
nikitateggi 3:9a06c2bed650 22 int concatenate_value2 = 0;
suhasini 13:5d3b478ea9c7 23 // int32_t sample_sum; // static int32_t avg[1500];
suhasini 13:5d3b478ea9c7 24 int32_t count = 0; int32_t fs = 500;
suhasini 13:5d3b478ea9c7 25 uint32_t ecg_buf[N_ECG];
nikitateggi 3:9a06c2bed650 26 Timer t;
suhasini 13:5d3b478ea9c7 27
suhasini 13:5d3b478ea9c7 28 //------------------ Declaration for Peak value detection ------------------------------------
suhasini 13:5d3b478ea9c7 29
suhasini 13:5d3b478ea9c7 30 uint32_t hi_val;uint32_t pk_val[20];unsigned int pk_pos[20]={0};unsigned int a; //uint32_t pk=0;
suhasini 13:5d3b478ea9c7 31 int hi_dif = 0;int j=0; // int count1 = N_ECG/fs, a_dif=0, fs1 = fs ,h=0;
suhasini 13:5d3b478ea9c7 32 // ------------------------- Declaration for Heart Rate calculation --------------------------
suhasini 13:5d3b478ea9c7 33 int n=0; //int n=10;
suhasini 13:5d3b478ea9c7 34 float pos_dif, HR[2], HR1,t_pos_dif;int t_sec = 60; float HR_sum = 0,HR_avg;
suhasini 13:5d3b478ea9c7 35 // -------------------------------------------------------------------------------------------
suhasini 13:5d3b478ea9c7 36
suhasini 13:5d3b478ea9c7 37 // unsigned char chk = 1;
nikitateggi 3:9a06c2bed650 38 pc.baud(baud_rate);
nikitateggi 4:6bd81bb1790d 39 freqset(); // setting the frequency
nikitateggi 4:6bd81bb1790d 40 setupfunc();
nikitateggi 3:9a06c2bed650 41 ecgsetupfunc();
suhasini 13:5d3b478ea9c7 42 // chk = 1;
nikitateggi 4:6bd81bb1790d 43 sd_open_ECGfile(pid); // opening the ecg file
suhasini 13:5d3b478ea9c7 44 pc.printf( "Raw data is = \n");
nikitateggi 3:9a06c2bed650 45 for(int i=0; i<N_ECG; i++)
nikitateggi 3:9a06c2bed650 46 {
nikitateggi 3:9a06c2bed650 47 concatenate_value2= readvalue();
nikitateggi 4:6bd81bb1790d 48 sd_write(concatenate_value2); // writing into the sd card
suhasini 13:5d3b478ea9c7 49 ecg_buf[i] = concatenate_value2;
nikitateggi 3:9a06c2bed650 50 pc.printf( "%d\n", concatenate_value2);
nikitateggi 3:9a06c2bed650 51 }
nikitateggi 3:9a06c2bed650 52
nikitateggi 4:6bd81bb1790d 53 sd_close(); // closing the file
suhasini 13:5d3b478ea9c7 54 /*
suhasini 13:5d3b478ea9c7 55 // ---------- reading back SD data for processing --------------------
suhasini 13:5d3b478ea9c7 56 sd_read_file(15);
suhasini 13:5d3b478ea9c7 57 printf("Reading back SD data\n");
suhasini 13:5d3b478ea9c7 58 for(int i=10;i<N_ECG;i++)
suhasini 13:5d3b478ea9c7 59 {
suhasini 13:5d3b478ea9c7 60 ecg_buf= sd_read();
suhasini 13:5d3b478ea9c7 61 //printf("%d\n",ecg_buf[i]);
suhasini 13:5d3b478ea9c7 62 }
suhasini 13:5d3b478ea9c7 63
suhasini 13:5d3b478ea9c7 64 sd_close(); */
suhasini 13:5d3b478ea9c7 65
suhasini 13:5d3b478ea9c7 66 //----------------------------- PEAK DETECTION AND HEART RATE CALCULATION ---------------------------------------------------
suhasini 13:5d3b478ea9c7 67 // -------------------------------------- PEAK DETECTION -------------------------------------------------------------
suhasini 13:5d3b478ea9c7 68
suhasini 13:5d3b478ea9c7 69 // ------------------ Main loop ---------------------------------
nikitateggi 3:9a06c2bed650 70
suhasini 13:5d3b478ea9c7 71 for(int i=0;i<N_ECG-10;i++){
suhasini 13:5d3b478ea9c7 72 if(ecg_buf[i]>ecg_buf[i+1])
suhasini 13:5d3b478ea9c7 73 {
suhasini 13:5d3b478ea9c7 74 hi_val = ecg_buf[i]; //To find the high value
suhasini 13:5d3b478ea9c7 75 //printf("high value= %d\n",hi_val);
suhasini 13:5d3b478ea9c7 76 a = i;
suhasini 13:5d3b478ea9c7 77 //printf("a= %d\n",a);
suhasini 13:5d3b478ea9c7 78 hi_dif = hi_val-ecg_buf[a+10];
suhasini 13:5d3b478ea9c7 79
suhasini 13:5d3b478ea9c7 80 //a_dif = ecg_buf[a+2] - ecg_buf[a+1];
suhasini 13:5d3b478ea9c7 81 //printf("The difference between high and low value is = %d\n",hi_dif);
suhasini 13:5d3b478ea9c7 82
suhasini 13:5d3b478ea9c7 83 // ---------------------------- If hi_val is greater than next ten input values, then compare the hi_val with the tenth input value.
suhasini 13:5d3b478ea9c7 84 // If the diff is greater than 10000, then it is a valid peak (pls chk the below condition)--------------------------------------------------
suhasini 13:5d3b478ea9c7 85 // if((hi_dif > 10000) && ((a+10) < N_ECG))
suhasini 13:5d3b478ea9c7 86 if(hi_dif > 10000)
suhasini 13:5d3b478ea9c7 87 {
suhasini 13:5d3b478ea9c7 88 // if(a_dif <= 0) ------------------------ add this condition if needed ----------------------
suhasini 13:5d3b478ea9c7 89 // {
suhasini 13:5d3b478ea9c7 90 pk_val[j] = hi_val; //if condition satisfied, put the "pk" value into "pk_val" buffer
suhasini 13:5d3b478ea9c7 91 pc.printf("peak value= %d\n",pk_val[j]);
suhasini 13:5d3b478ea9c7 92 pk_pos[j]=a; // also save the peak's position
suhasini 13:5d3b478ea9c7 93 pc.printf("peak position is = %d\n",pk_pos[j]);
suhasini 13:5d3b478ea9c7 94 i = a+120; // once confirmed that this is the necessary peak, skip the next 120 input values
suhasini 13:5d3b478ea9c7 95 n = j; // where n is the number of peaks detected
suhasini 13:5d3b478ea9c7 96 j = j+1;
suhasini 13:5d3b478ea9c7 97
suhasini 13:5d3b478ea9c7 98 // printf("j after peak detection is= %d\n",j);
suhasini 13:5d3b478ea9c7 99 // }
suhasini 13:5d3b478ea9c7 100 }
suhasini 13:5d3b478ea9c7 101 else
suhasini 13:5d3b478ea9c7 102 {
suhasini 13:5d3b478ea9c7 103 //h = a+1;
suhasini 13:5d3b478ea9c7 104 i = a+1;
suhasini 13:5d3b478ea9c7 105 // printf("i if peak not found is= %d\n",i);
suhasini 13:5d3b478ea9c7 106 }
suhasini 13:5d3b478ea9c7 107 // store the peak value position in "pk_pos"
suhasini 13:5d3b478ea9c7 108
suhasini 13:5d3b478ea9c7 109 }
suhasini 13:5d3b478ea9c7 110 }
suhasini 13:5d3b478ea9c7 111 // ----------------- HEART RATE LOGIC ---------------------------
nikitateggi 3:9a06c2bed650 112
suhasini 13:5d3b478ea9c7 113 for(int i = 0;i < n-1;i++)
suhasini 13:5d3b478ea9c7 114 {
suhasini 13:5d3b478ea9c7 115 pos_dif = pk_pos[i+1] - pk_pos[i]; // difference between two consequtive peaks
suhasini 13:5d3b478ea9c7 116 pc.printf("peak position diff is = %f\n",pos_dif);
suhasini 13:5d3b478ea9c7 117 //printf("peak position i value is = %d\n",i);
suhasini 13:5d3b478ea9c7 118 t_pos_dif = pos_dif/fs; // sample difference between peak positions divided by sampling frequency gives the difference value in terms of actual time
suhasini 13:5d3b478ea9c7 119 pc.printf("time in seconds is = %f\n",t_pos_dif);
suhasini 13:5d3b478ea9c7 120 HR[i] = t_sec/t_pos_dif; //HR calculation
suhasini 13:5d3b478ea9c7 121 pc.printf("Heart Rate is = %f\n",HR[i]);
suhasini 13:5d3b478ea9c7 122 // n = i;
suhasini 13:5d3b478ea9c7 123 HR1 = HR[0];
suhasini 13:5d3b478ea9c7 124
suhasini 13:5d3b478ea9c7 125 }
suhasini 13:5d3b478ea9c7 126 // ---------------------- To average individual HRs for higher number of samples -----------------------
suhasini 13:5d3b478ea9c7 127 /* for(int i = 0;i < 5;i++)
suhasini 13:5d3b478ea9c7 128 {
suhasini 13:5d3b478ea9c7 129 HR_sum = HR[i]+HR_sum;
suhasini 13:5d3b478ea9c7 130 }
suhasini 13:5d3b478ea9c7 131 HR_avg = HR_sum/5; // To find average of all the individual HRs calculated
suhasini 13:5d3b478ea9c7 132 printf("Heart Rate sum is = %f\n",HR_sum);
suhasini 13:5d3b478ea9c7 133 printf("Denominator = %d\n",n);
suhasini 13:5d3b478ea9c7 134 printf("Heart Rate = %f\n",HR_avg);
suhasini 13:5d3b478ea9c7 135 */
suhasini 13:5d3b478ea9c7 136 return HR1;
suhasini 13:5d3b478ea9c7 137 // return HR_avg;
suhasini 13:5d3b478ea9c7 138
suhasini 13:5d3b478ea9c7 139 } // End of main function
suhasini 13:5d3b478ea9c7 140