created separate function for hex to char

Dependencies:   SDFileSystem ds3231 eeprom_Nikita mbed testUniGraphic_150217

Fork of SS_SensePOC2P0_11Dec2017_USERPID by rashmi v

Committer:
rashmivenkataramaiah
Date:
Mon Sep 11 10:02:46 2017 +0000
Revision:
42:c81673b04b6a
Parent:
41:1141a75eacc4
Child:
43:85a7f399cb9d
PID tracking with getpid, store pid

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