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

Committer:
avp2417
Date:
Sun Aug 20 16:21:54 2017 +0000
Revision:
40:f7f351699288
Parent:
39:69b09bd87502
Child:
41:1141a75eacc4
Modification of BP, ECG and GLC operating ranges into 11th Aug Dharwad code. - By Amit on 12th Aug 2017

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 39:69b09bd87502 15 #include "eeprom_pgm.h"
nidhinvarghese 14:f5c62d30c6fc 16 #include "struct.h" // Added on 31/5/17_Nidhin
nikitateggi 19:1650bbc923cc 17 //#include "test_type.h" //Added on 31/5/17_Nidhin
avp2417 40:f7f351699288 18
avp2417 40:f7f351699288 19 #define MAX_HR_THRESHOLD 205
avp2417 40:f7f351699288 20 #define MIN_HR_THRESHOLD 25
avp2417 40:f7f351699288 21
avp2417 40:f7f351699288 22
suhasini 26:53ff13a164f3 23 FILE *fpeecg1; // FILE pointer to ECG file
nikitateggi 3:9a06c2bed650 24 Serial pc(USBTX,USBRX);
nikitateggi 1:8316c23ec6b9 25
nikitateggi 1:8316c23ec6b9 26
nikitateggi 22:ffa88619551d 27 uint16_t ecg(int32_t pid)
nikitateggi 22:ffa88619551d 28 //float ecg(int pid)
nikitateggi 3:9a06c2bed650 29 {
nikitateggi 20:7c64e6ecad76 30
nikitateggi 20:7c64e6ecad76 31 uint8_t lead_reg=0; // added on 14/06 to check lead -off
nidhinvarghese 14:f5c62d30c6fc 32 //----------------------- Structure for Bluetooth Added Nidhin 1/6/2017-------------------//
nidhinvarghese 14:f5c62d30c6fc 33
nidhinvarghese 14:f5c62d30c6fc 34 //BLUETOOTH STRUCTURE
nidhinvarghese 14:f5c62d30c6fc 35
nidhinvarghese 14:f5c62d30c6fc 36 BLEMsg_info *ptr_BLEMsg_info_ecg, BLEMsg_info_ecg; // A copy of master strcuture [ "BLEMsg_info" ] by name "BLEMsg_info_ecg" is created
nidhinvarghese 14:f5c62d30c6fc 37 ptr_BLEMsg_info_ecg = &BLEMsg_info_ecg; // *ptr_BLEMsg_info_bp is the pointer to local copy;
nidhinvarghese 14:f5c62d30c6fc 38
nidhinvarghese 14:f5c62d30c6fc 39 // Declaration of Date Structure
nidhinvarghese 14:f5c62d30c6fc 40 DateTime_info *ptr_DateTime_info_ecg, DateTime_info_ecg; // A copy of Master Structure "DateTime_info" created,
nidhinvarghese 14:f5c62d30c6fc 41 ptr_DateTime_info_ecg = &DateTime_info_ecg; // Structure pointer points to that copy.
nidhinvarghese 14:f5c62d30c6fc 42
nidhinvarghese 14:f5c62d30c6fc 43
nidhinvarghese 14:f5c62d30c6fc 44 // RTC operations
nidhinvarghese 14:f5c62d30c6fc 45 time_t epoch_time_ecg; //A copy of time_t by name epoch_time_bp is created
nidhinvarghese 14:f5c62d30c6fc 46 epoch_time_ecg = rtc_read(); // time is got from get epoch function.
nidhinvarghese 14:f5c62d30c6fc 47
nidhinvarghese 14:f5c62d30c6fc 48 struct tm * ptr_time_info_ecg, time_info_ecg; // Sturucture copy of tm is created
nidhinvarghese 14:f5c62d30c6fc 49 ptr_time_info_ecg = localtime(&epoch_time_ecg); // Structure accepts the time in local format from "time_t" type.
nidhinvarghese 14:f5c62d30c6fc 50
nidhinvarghese 14:f5c62d30c6fc 51 //BELOW LINE IS TO CHECK Date and TIME
nidhinvarghese 15:208b146151ba 52 //pc.printf("Time is %d: %d: %d\n", (*ptr_time_info_ecg).tm_hour, (*ptr_time_info_ecg).tm_min, (*ptr_time_info_ecg).tm_sec);
nidhinvarghese 15:208b146151ba 53 //pc.printf("Date is %d:%d:%d\n", (*ptr_time_info_ecg).tm_mday, (*ptr_time_info_ecg).tm_mon+1, (*ptr_time_info_ecg).tm_year-100);
nidhinvarghese 14:f5c62d30c6fc 54
nidhinvarghese 14:f5c62d30c6fc 55 //Copying from one structure to the other using variables
nidhinvarghese 14:f5c62d30c6fc 56 DateTime_info_ecg.hour = (uint8_t)(*ptr_time_info_ecg).tm_hour;
nidhinvarghese 14:f5c62d30c6fc 57 DateTime_info_ecg.mins = (uint8_t)(*ptr_time_info_ecg).tm_min;
nidhinvarghese 14:f5c62d30c6fc 58 DateTime_info_ecg.sec = (uint8_t)(*ptr_time_info_ecg).tm_sec;
nidhinvarghese 14:f5c62d30c6fc 59
nidhinvarghese 14:f5c62d30c6fc 60 DateTime_info_ecg.date = (uint8_t) (*ptr_time_info_ecg).tm_mday;
nidhinvarghese 14:f5c62d30c6fc 61 DateTime_info_ecg.month =(uint8_t)(*ptr_time_info_ecg).tm_mon+1;
nidhinvarghese 14:f5c62d30c6fc 62 DateTime_info_ecg.year = (uint8_t)(*ptr_time_info_ecg).tm_year-100;
nidhinvarghese 14:f5c62d30c6fc 63
nidhinvarghese 14:f5c62d30c6fc 64 // Copying Time to Main structure
nidhinvarghese 14:f5c62d30c6fc 65 BLEMsg_info_ecg.date_time.hour = DateTime_info_ecg.hour;
nidhinvarghese 14:f5c62d30c6fc 66 BLEMsg_info_ecg.date_time.mins = DateTime_info_ecg.mins;
nidhinvarghese 14:f5c62d30c6fc 67 BLEMsg_info_ecg.date_time.sec = DateTime_info_ecg.sec;
nidhinvarghese 14:f5c62d30c6fc 68
nidhinvarghese 14:f5c62d30c6fc 69 BLEMsg_info_ecg.date_time.date = DateTime_info_ecg.date ;
nidhinvarghese 14:f5c62d30c6fc 70 BLEMsg_info_ecg.date_time.month = DateTime_info_ecg.month ;
nidhinvarghese 14:f5c62d30c6fc 71 BLEMsg_info_ecg.date_time.year = DateTime_info_ecg.year ;
nidhinvarghese 14:f5c62d30c6fc 72
nidhinvarghese 14:f5c62d30c6fc 73
nidhinvarghese 14:f5c62d30c6fc 74 //Checking if the structure has these values
nidhinvarghese 15:208b146151ba 75 //pc.printf("Time 2 is %d:%d:%d\n", DateTime_info_ecg.hour, DateTime_info_ecg.mins, DateTime_info_ecg.sec);
nidhinvarghese 15:208b146151ba 76 //pc.printf("\t Date is %d:%d:%d\n",DateTime_info_ecg.date, DateTime_info_ecg.month, DateTime_info_ecg.year);
nidhinvarghese 14:f5c62d30c6fc 77
nidhinvarghese 14:f5c62d30c6fc 78
nidhinvarghese 14:f5c62d30c6fc 79 //Loading values to of Test type
nidhinvarghese 14:f5c62d30c6fc 80 test_type_info test_type_info_ecg; // copy of " test_type_info" created
nidhinvarghese 14:f5c62d30c6fc 81 test_type_info_ecg = ECG_Test; // Loaded value 00 to the test type
nidhinvarghese 14:f5c62d30c6fc 82
nidhinvarghese 14:f5c62d30c6fc 83 BLEMsg_info_ecg.test_type = test_type_info_ecg;
nidhinvarghese 14:f5c62d30c6fc 84 //Check if 00 is getting printed
nidhinvarghese 15:208b146151ba 85 //pc.printf("Test Type is : %d\n", test_type_info_ecg);
nidhinvarghese 14:f5c62d30c6fc 86
nidhinvarghese 14:f5c62d30c6fc 87
nidhinvarghese 14:f5c62d30c6fc 88 // Loading values of Length , PID, DID, sampling frequency, number of samples, calculated data.
nikitateggi 39:69b09bd87502 89 BLEMsg_info_ecg.device_id = eprom_read_8(12); // Device ID fixed
nidhinvarghese 14:f5c62d30c6fc 90 BLEMsg_info_ecg.patient_id = (uint32_t)pid; // Patient ID
nidhinvarghese 14:f5c62d30c6fc 91 BLEMsg_info_ecg.sampling_freq = 500; // sampling frrquency
nikitateggi 32:76892fdf5e4c 92 BLEMsg_info_ecg.length = 8022; //Total length of data in bytes 22 B+ 4000 data
nidhinvarghese 14:f5c62d30c6fc 93
nidhinvarghese 14:f5c62d30c6fc 94 /*
nidhinvarghese 14:f5c62d30c6fc 95 //Loading number of samples
nidhinvarghese 14:f5c62d30c6fc 96 NumSamples_info NumSamples_info_bp; //Copy of structure NumSamples_info
nidhinvarghese 14:f5c62d30c6fc 97 NumSamples_info_bp.num_ppg_sample = 1664; // PPG & ECG Sample number loaded in structure copy
nidhinvarghese 14:f5c62d30c6fc 98 NumSamples_info_bp.num_ecg_sample = 1024;
nidhinvarghese 14:f5c62d30c6fc 99 */
nidhinvarghese 14:f5c62d30c6fc 100
nidhinvarghese 14:f5c62d30c6fc 101 BLEMsg_info_ecg.num_samples.num_sample_ppg_dummy = 0 ;// PPG number of samples copied to master struct
nikitateggi 32:76892fdf5e4c 102 BLEMsg_info_ecg.num_samples.num_sample_ecg_OTtyp = 2000 ; // ECG number of samples copied to master struct
nidhinvarghese 14:f5c62d30c6fc 103
nidhinvarghese 14:f5c62d30c6fc 104 //----------------------------------------END Structure for Bluetooth - Added Nidhin 1/6/2017-------
nidhinvarghese 14:f5c62d30c6fc 105
suhasini 26:53ff13a164f3 106 uint32_t concatenate_value2 = 0; // ORG. "int concatenate_value2 = 0;" Nidhin 1/6/17
suhasini 26:53ff13a164f3 107 uint32_t *ecg_ptr; // Added 1/6/2017 Nidhin
nidhinvarghese 14:f5c62d30c6fc 108 ecg_ptr = &concatenate_value2; // Pointer to pass for ECG write into SD card Nidhin 1/6/2017
nidhinvarghese 14:f5c62d30c6fc 109
suhasini 26:53ff13a164f3 110 uint16_t count = 0;
suhasini 26:53ff13a164f3 111 uint16_t fs = 500;
suhasini 26:53ff13a164f3 112 //uint32_t ecg_buf[N_ECG];
suhasini 26:53ff13a164f3 113 Timer t;
suhasini 13:5d3b478ea9c7 114
suhasini 13:5d3b478ea9c7 115 //------------------ Declaration for Peak value detection ------------------------------------
avp2417 36:00d96aa14658 116 uint32_t ecg_samp1[1] ;
avp2417 36:00d96aa14658 117 uint32_t ecg_samp2[1];
avp2417 36:00d96aa14658 118 uint32_t ecg_samp3[1]; // to Stores sample 1, 2 & 10th sample
suhasini 26:53ff13a164f3 119 uint32_t fppos; // Variable to hold pointer position
suhasini 26:53ff13a164f3 120 uint32_t hi_val;
suhasini 26:53ff13a164f3 121 uint32_t pk_val[20];
suhasini 26:53ff13a164f3 122 uint16_t pk_pos[20]={0};
suhasini 26:53ff13a164f3 123 int32_t hi_dif = 0; //diff between high value and it's consecutive value
suhasini 26:53ff13a164f3 124 uint16_t j=0; // int count1 = N_ECG/fs, a_dif=0, fs1 = fs ,h=0;
suhasini 26:53ff13a164f3 125 int32_t m =0; // Variable to move the file pointer in fseek fun
suhasini 26:53ff13a164f3 126 int32_t samp_10 = 28; // Variable to move to 10th sampple from current
suhasini 26:53ff13a164f3 127 char buffer3[32];
suhasini 26:53ff13a164f3 128
suhasini 13:5d3b478ea9c7 129 // ------------------------- Declaration for Heart Rate calculation --------------------------
suhasini 26:53ff13a164f3 130 uint8_t n=0;
suhasini 26:53ff13a164f3 131 float pos_dif, HR[10], HR1,t_pos_dif;
suhasini 26:53ff13a164f3 132 uint8_t t_sec = 60;
suhasini 26:53ff13a164f3 133 float HR_sum = 0,HR_avg;
suhasini 13:5d3b478ea9c7 134 // -------------------------------------------------------------------------------------------
nikitateggi 3:9a06c2bed650 135 pc.baud(baud_rate);
nikitateggi 4:6bd81bb1790d 136 freqset(); // setting the frequency
nikitateggi 22:ffa88619551d 137 setupfunc();
nikitateggi 22:ffa88619551d 138 //ecgtestsetupfunc(); // For test set up of 1Hz square wave signal
nikitateggi 22:ffa88619551d 139 lead_reg= ecgsetupfunc();
avp2417 36:00d96aa14658 140
nikitateggi 22:ffa88619551d 141 //ORIGINAL sd_open_ECGfile(pid); // opening the ecg file COMMENTED Nidhin 1/6/2017
nikitateggi 20:7c64e6ecad76 142 if (lead_reg==0) // checking for proper lead contact// 14/06
nikitateggi 22:ffa88619551d 143 {
nidhinvarghese 14:f5c62d30c6fc 144 sd_open_ECGfilee(pid); // REPLACED Nidhin 1/6/2017 Nidhin
nidhinvarghese 14:f5c62d30c6fc 145
suhasini 13:5d3b478ea9c7 146 pc.printf( "Raw data is = \n");
suhasini 26:53ff13a164f3 147
nikitateggi 3:9a06c2bed650 148 for(int i=0; i<N_ECG; i++)
nikitateggi 3:9a06c2bed650 149 {
nikitateggi 3:9a06c2bed650 150 concatenate_value2= readvalue();
nikitateggi 22:ffa88619551d 151 pc.printf( "%d\n", concatenate_value2); //ADDED Nidhin 21/6/2017
nidhinvarghese 14:f5c62d30c6fc 152
nidhinvarghese 14:f5c62d30c6fc 153 sd_ecgwrite(ecg_ptr); // REPLACED Nidhin 1/6/2017
suhasini 26:53ff13a164f3 154
nikitateggi 3:9a06c2bed650 155 }
nidhinvarghese 14:f5c62d30c6fc 156
avp2417 36:00d96aa14658 157 sd_close_ecg(); // closing the ECG file REPLACED Nidhin 1/6/2017 Nidhin
nikitateggi 22:ffa88619551d 158
nikitateggi 22:ffa88619551d 159
suhasini 13:5d3b478ea9c7 160 //----------------------------- PEAK DETECTION AND HEART RATE CALCULATION ---------------------------------------------------
suhasini 26:53ff13a164f3 161
suhasini 13:5d3b478ea9c7 162 // -------------------------------------- PEAK DETECTION -------------------------------------------------------------
suhasini 26:53ff13a164f3 163 // ----------------------------------------- Main loop --------------------------------------------------
suhasini 26:53ff13a164f3 164
suhasini 26:53ff13a164f3 165 sprintf(buffer3, "/sd/%d_ECG.csv", pid); // For opening a specific file
suhasini 26:53ff13a164f3 166 fpeecg1 = fopen(buffer3, "r");
suhasini 13:5d3b478ea9c7 167
suhasini 26:53ff13a164f3 168 for(uint16_t i=0;i<(N_ECG-10);i++){
suhasini 26:53ff13a164f3 169 count++;
suhasini 26:53ff13a164f3 170 rewind(fpeecg1); // Go to start of file each time
suhasini 26:53ff13a164f3 171 fseek(fpeecg1, m, SEEK_CUR); // Update the count value according to move pointer //// after every calc. the pointer moves to 0th position, as we have used fseek, hence to make it jump to the respective position by "m" bytes this command is used
suhasini 26:53ff13a164f3 172 fread(ecg_samp1, sizeof(uint32_t), 1, fpeecg1); // Read sample 1
suhasini 26:53ff13a164f3 173 fread(ecg_samp2, sizeof(uint32_t), 1, fpeecg1); // Read Sample 2
suhasini 26:53ff13a164f3 174 fseek(fpeecg1, samp_10, SEEK_CUR); // Moving to tenth sample
suhasini 26:53ff13a164f3 175 fread(ecg_samp3, sizeof(uint32_t), 1, fpeecg1); // Read 3rd sample
suhasini 26:53ff13a164f3 176
suhasini 26:53ff13a164f3 177 if(ecg_samp1[0]>ecg_samp2[0])
suhasini 13:5d3b478ea9c7 178 {
suhasini 26:53ff13a164f3 179 hi_val = ecg_samp1[0]; //To find the high value
suhasini 26:53ff13a164f3 180 hi_dif = hi_val-ecg_samp3[0];
suhasini 13:5d3b478ea9c7 181
suhasini 26:53ff13a164f3 182 // ---------------------------- If hi_val is greater than next ten input values, then compare the hi_val with the tenth input value.
suhasini 26:53ff13a164f3 183 // If the diff is greater than 10000, then it is a valid peak (pls chk the below condition)-------------------------------------
suhasini 13:5d3b478ea9c7 184 if(hi_dif > 10000)
suhasini 13:5d3b478ea9c7 185 {
suhasini 13:5d3b478ea9c7 186 pk_val[j] = hi_val; //if condition satisfied, put the "pk" value into "pk_val" buffer
nikitateggi 22:ffa88619551d 187 pc.printf("peak value= %d\n",pk_val[j]);
suhasini 26:53ff13a164f3 188 pk_pos[j]=i; // also save the peak's position
nikitateggi 22:ffa88619551d 189 pc.printf("peak position is = %d\n",pk_pos[j]);
suhasini 26:53ff13a164f3 190 i = i+120; // once confirmed that this is the necessary peak, skip the next 120 input values
suhasini 13:5d3b478ea9c7 191 n = j; // where n is the number of peaks detected
suhasini 13:5d3b478ea9c7 192 j = j+1;
suhasini 26:53ff13a164f3 193 m = m + 480; //similar reason to considering 28, but to skip 120 samples. this cond. is satisfied only when we hit a peak - suhasini_26thjune17
suhasini 13:5d3b478ea9c7 194
avp2417 36:00d96aa14658 195 }
suhasini 26:53ff13a164f3 196
suhasini 13:5d3b478ea9c7 197 else
suhasini 13:5d3b478ea9c7 198 {
suhasini 26:53ff13a164f3 199 m = m+4; // this is when we do not hit a peak and have to continue searching thru, hence move to the next sample and not skip 120 samples- - suhasini_26thjune17
suhasini 13:5d3b478ea9c7 200 }
avp2417 36:00d96aa14658 201 }
suhasini 26:53ff13a164f3 202 else
suhasini 26:53ff13a164f3 203 {
suhasini 26:53ff13a164f3 204 m = m+4;
suhasini 13:5d3b478ea9c7 205 }
suhasini 26:53ff13a164f3 206 //pc.printf("i=%d",i);
suhasini 13:5d3b478ea9c7 207 }
suhasini 26:53ff13a164f3 208 n=n+1;
suhasini 26:53ff13a164f3 209 pc.printf("n=%d\n",n);
suhasini 26:53ff13a164f3 210
suhasini 13:5d3b478ea9c7 211 // ----------------- HEART RATE LOGIC ---------------------------
nikitateggi 3:9a06c2bed650 212
suhasini 26:53ff13a164f3 213 for(uint16_t i = 0;i < n-1;i++)
suhasini 13:5d3b478ea9c7 214 {
suhasini 13:5d3b478ea9c7 215 pos_dif = pk_pos[i+1] - pk_pos[i]; // difference between two consequtive peaks
suhasini 13:5d3b478ea9c7 216 pc.printf("peak position diff is = %f\n",pos_dif);
suhasini 13:5d3b478ea9c7 217 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 218 pc.printf("time in seconds is = %f\n",t_pos_dif);
suhasini 13:5d3b478ea9c7 219 HR[i] = t_sec/t_pos_dif; //HR calculation
suhasini 13:5d3b478ea9c7 220 pc.printf("Heart Rate is = %f\n",HR[i]);
suhasini 13:5d3b478ea9c7 221 HR1 = HR[0];
suhasini 26:53ff13a164f3 222 }
suhasini 13:5d3b478ea9c7 223
suhasini 26:53ff13a164f3 224
suhasini 13:5d3b478ea9c7 225 // ---------------------- To average individual HRs for higher number of samples -----------------------
suhasini 26:53ff13a164f3 226 for(uint16_t i = 0;i < n-1;i++)
suhasini 13:5d3b478ea9c7 227 {
avp2417 40:f7f351699288 228 HR_sum = HR[i] + HR_sum;
suhasini 13:5d3b478ea9c7 229 }
avp2417 40:f7f351699288 230 HR_avg = (HR_sum / (n-1)); // To find average of all the individual HRs calculated
suhasini 13:5d3b478ea9c7 231 printf("Heart Rate sum is = %f\n",HR_sum);
suhasini 26:53ff13a164f3 232 printf("Heart Rate avg is = %f\n",HR_avg);
nidhinvarghese 14:f5c62d30c6fc 233
suhasini 26:53ff13a164f3 234 fclose(fpeecg1);
suhasini 26:53ff13a164f3 235 pc.printf("temporary file closed\n");
nikitateggi 31:0f67acfc6236 236
avp2417 40:f7f351699288 237 if(HR_avg > MAX_HR_THRESHOLD || HR_avg < MIN_HR_THRESHOLD)
nikitateggi 31:0f67acfc6236 238 {
nikitateggi 39:69b09bd87502 239 delete_subfiles(pid); // added on 11/8/17 nikita
nikitateggi 31:0f67acfc6236 240 return 1; // out of range condition returning 1 //nikita//10/7
nikitateggi 31:0f67acfc6236 241 }
nikitateggi 31:0f67acfc6236 242 else
nikitateggi 31:0f67acfc6236 243 {
nikitateggi 31:0f67acfc6236 244
nikitateggi 31:0f67acfc6236 245 BLEMsg_info_ecg.cal_data.cal_sbp_dummy = 0;
avp2417 36:00d96aa14658 246 BLEMsg_info_ecg.cal_data.cal_dbp_OTtyp = HR_avg; //To be modified after HR code is added.
nidhinvarghese 14:f5c62d30c6fc 247
nikitateggi 31:0f67acfc6236 248 structure_file(ptr_BLEMsg_info_ecg, pid); //copy the ECG structure to Main file //COMMENTED Nidhin 10/6/2017
nikitateggi 31:0f67acfc6236 249 ecgfile_mainfile(pid); // copy raw data to the main file and ECG file is cleared. //COMMENTED Nidhin 10/6/2017
nikitateggi 22:ffa88619551d 250
nikitateggi 31:0f67acfc6236 251 pc.printf("Closed the main file\n");
nikitateggi 31:0f67acfc6236 252 return HR_avg;
nikitateggi 31:0f67acfc6236 253 }
nikitateggi 22:ffa88619551d 254 }
nikitateggi 20:7c64e6ecad76 255 else
nikitateggi 20:7c64e6ecad76 256 {
nikitateggi 31:0f67acfc6236 257 pc.printf("improper lead connection");
avp2417 36:00d96aa14658 258 return 0;
nikitateggi 20:7c64e6ecad76 259 }
suhasini 26:53ff13a164f3 260 pc.printf("closing temporary file\n");
avp2417 34:8f6b0dc124e8 261 } // End of main function