Version beta

Dependencies:   BLE_API Definiciones Funciones HeartRate_ Hotboards_rtcc LM_35 MAX_30100 MMA8451Q Pines SDFileSystem mbed nRF51822

Fork of MAX30100_oxullo by Eduardo Avelar

Committer:
arturogasca
Date:
Thu Jan 19 20:26:20 2017 +0000
Revision:
1:5ecac6e368d2
Parent:
0:80ecccd27646
Version beta para equipos biometricos

Who changed what in which revision?

UserRevisionLine numberNew contents of line
arturogasca 1:5ecac6e368d2 1 #include "mbed.h"
arturogasca 1:5ecac6e368d2 2 #include "pines.h"
arturogasca 1:5ecac6e368d2 3 #include "ble/BLE.h"
arturogasca 1:5ecac6e368d2 4 #include "ble/services/UARTService.h"
arturogasca 1:5ecac6e368d2 5 #include "MMA8451Q.h"
arturogasca 1:5ecac6e368d2 6 #include "MAX30100_PulseOximeter.h"
arturogasca 1:5ecac6e368d2 7 #include "SDFileSystem.h"
arturogasca 1:5ecac6e368d2 8 #include "LM35.h"
arturogasca 1:5ecac6e368d2 9 #include "Hotboards_rtcc.h"
arturogasca 1:5ecac6e368d2 10 #include "HeartRate.h"
arturogasca 1:5ecac6e368d2 11
arturogasca 1:5ecac6e368d2 12
arturogasca 1:5ecac6e368d2 13 //////////////////////////////Definiciones BLE
arturogasca 1:5ecac6e368d2 14
arturogasca 1:5ecac6e368d2 15 #define WAIT_CONECTION_TIMEOUT 20
arturogasca 1:5ecac6e368d2 16 const char *bleName = "BIOMETRICOS";
arturogasca 1:5ecac6e368d2 17 BLEDevice ble;
arturogasca 1:5ecac6e368d2 18 UARTService *uartServicePtr;
arturogasca 1:5ecac6e368d2 19 bool BLE_DATA_AVAILABLE = false;
arturogasca 1:5ecac6e368d2 20 bool BLE_AVAILABLE =true;
arturogasca 1:5ecac6e368d2 21 bool BLE_TIMEOUT = true;
arturogasca 1:5ecac6e368d2 22 int BleSeconds = 0;
arturogasca 1:5ecac6e368d2 23 uint8_t datosBle[20];
arturogasca 1:5ecac6e368d2 24
arturogasca 1:5ecac6e368d2 25
arturogasca 1:5ecac6e368d2 26 #define NEED_CONSOLE_OUTPUT 1 /* Set this if you need debug messages on the console;
arturogasca 1:5ecac6e368d2 27 * it will have an impact on code-size and power consumption. */
arturogasca 1:5ecac6e368d2 28 #if NEED_CONSOLE_OUTPUT
arturogasca 1:5ecac6e368d2 29 #define DEBUG(STR) { if (uartServicePtr) uartServicePtr->write(STR, strlen(STR)); }
arturogasca 1:5ecac6e368d2 30 #else
arturogasca 1:5ecac6e368d2 31 #define DEBUG(...) /* nothing */
arturogasca 1:5ecac6e368d2 32 #endif /* #if NEED_CONSOLE_OUTPUT */
arturogasca 1:5ecac6e368d2 33
arturogasca 1:5ecac6e368d2 34
arturogasca 1:5ecac6e368d2 35 ///////////////////////////Definiciones para RTC
arturogasca 1:5ecac6e368d2 36
arturogasca 1:5ecac6e368d2 37 const char *week[] = {"Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado"};//days of the week
arturogasca 1:5ecac6e368d2 38 const char *months[] = {"ENE","FEB","MAR","ABR","MAY","JUN", "JUL", "AGO","SEP","OCT","NOV","DIC"};//months of the year
arturogasca 1:5ecac6e368d2 39 I2C device(I2C_SDA,I2C_SCL); //sda scl
arturogasca 1:5ecac6e368d2 40 Hotboards_rtcc rtcc(device);
arturogasca 1:5ecac6e368d2 41
arturogasca 1:5ecac6e368d2 42
arturogasca 1:5ecac6e368d2 43 //////////////////Variables de sensores para almacenamiento / envio
arturogasca 1:5ecac6e368d2 44
arturogasca 1:5ecac6e368d2 45 float Temperatura;
arturogasca 1:5ecac6e368d2 46 float RitmoCardiaco;
arturogasca 1:5ecac6e368d2 47 uint16_t Oxigeno;
arturogasca 1:5ecac6e368d2 48 uint16_t Pasos;
arturogasca 1:5ecac6e368d2 49
arturogasca 1:5ecac6e368d2 50 ///////////////////////Definicion para Sensor de temperatura
AVELARDEV 0:80ecccd27646 51
arturogasca 1:5ecac6e368d2 52 LM35 SensorTemp(PIN_ADC1); //PIN_ADC
arturogasca 1:5ecac6e368d2 53
arturogasca 1:5ecac6e368d2 54 //////////////////////Definicion para Thermistor
arturogasca 1:5ecac6e368d2 55
arturogasca 1:5ecac6e368d2 56 AnalogIn thermistor(PIN_ADC2);
arturogasca 1:5ecac6e368d2 57
arturogasca 1:5ecac6e368d2 58 ///////////////////////////////////////Definicion de SD
arturogasca 1:5ecac6e368d2 59
arturogasca 1:5ecac6e368d2 60 SDFileSystem sd(MOSI,MISO,SCLK,CS, "sd"); // // mosi, miso, sclk, cs, name
arturogasca 1:5ecac6e368d2 61 const char* PathSensores = "/sd/LogSensores/sensores.txt";
arturogasca 1:5ecac6e368d2 62 const char* PathECG = "/sd/LogSensores/ECG.txt";
arturogasca 1:5ecac6e368d2 63 const char* PathAxis = "/sd/LogSensores/Axis.txt";
arturogasca 1:5ecac6e368d2 64 bool archivo = true;
arturogasca 1:5ecac6e368d2 65
arturogasca 1:5ecac6e368d2 66
arturogasca 1:5ecac6e368d2 67 //////////////////////////Definicion de tiempos
arturogasca 1:5ecac6e368d2 68
arturogasca 1:5ecac6e368d2 69 #define REGISTER_TIME 30
arturogasca 1:5ecac6e368d2 70 #define UPDATE_TIME 1
arturogasca 1:5ecac6e368d2 71 int RegisterSeconds = 0;
arturogasca 1:5ecac6e368d2 72 int UpdateSeconds = 0;
arturogasca 1:5ecac6e368d2 73 bool SampleTime = false;
arturogasca 1:5ecac6e368d2 74 //Ticker t1;
arturogasca 1:5ecac6e368d2 75 //Ticker t2;
arturogasca 1:5ecac6e368d2 76
AVELARDEV 0:80ecccd27646 77
arturogasca 1:5ecac6e368d2 78 /////////////////////////Definicion de sensor ECG
arturogasca 1:5ecac6e368d2 79
arturogasca 1:5ecac6e368d2 80 #define MUESTRAS_ECG 100
arturogasca 1:5ecac6e368d2 81 bool ECG_SAMPLE_READY = false;
arturogasca 1:5ecac6e368d2 82 int ecg_idx = 0;
arturogasca 1:5ecac6e368d2 83 unsigned short ecgSamples[MUESTRAS_ECG];
arturogasca 1:5ecac6e368d2 84 float ecgSamples_f[MUESTRAS_ECG];
arturogasca 1:5ecac6e368d2 85 HeartRate HR(ECG_OUT, ECG_LO_PLS, ECG_LO_MIN);
arturogasca 1:5ecac6e368d2 86
arturogasca 1:5ecac6e368d2 87 ////////////////////Definicion de sensor RESPIRACION
AVELARDEV 0:80ecccd27646 88
arturogasca 1:5ecac6e368d2 89 #define MUESTRAS_RESP 100
arturogasca 1:5ecac6e368d2 90 bool RESP_SAMPLE_READY = false;
arturogasca 1:5ecac6e368d2 91 int resp_idx = 0;
arturogasca 1:5ecac6e368d2 92 unsigned short respSamples[MUESTRAS_RESP];
arturogasca 1:5ecac6e368d2 93 float respSamples_f[MUESTRAS_RESP];
arturogasca 1:5ecac6e368d2 94
arturogasca 1:5ecac6e368d2 95 ////////////////////Definicion de muestras ACELEROMETRO
arturogasca 1:5ecac6e368d2 96 #define MMA8451_I2C_ADDRESS (0x1d<<1)
arturogasca 1:5ecac6e368d2 97 MMA8451Q acc(I2C_SDA, I2C_SCL, MMA8451_I2C_ADDRESS);
arturogasca 1:5ecac6e368d2 98
arturogasca 1:5ecac6e368d2 99 #define MUESTRAS_AXIS 100
arturogasca 1:5ecac6e368d2 100 bool AXIS_SAMPLE_READY = false;
arturogasca 1:5ecac6e368d2 101 int axis_idx = 0;
arturogasca 1:5ecac6e368d2 102 float axisSamples[MUESTRAS_AXIS][3]; //100 muestras, 3 ejes
arturogasca 1:5ecac6e368d2 103 //float axisSamples_f[MUESTRAS_axis];
arturogasca 1:5ecac6e368d2 104
AVELARDEV 0:80ecccd27646 105
AVELARDEV 0:80ecccd27646 106 // PulseOximeter is the higher level interface to the sensor
AVELARDEV 0:80ecccd27646 107 // it offers:
AVELARDEV 0:80ecccd27646 108 // * beat detection reporting
AVELARDEV 0:80ecccd27646 109 // * heart rate calculation
AVELARDEV 0:80ecccd27646 110 // * SpO2 (oxidation level) calculation
AVELARDEV 0:80ecccd27646 111
arturogasca 1:5ecac6e368d2 112 ///////////////////////////Definiciones para sensor OXIMETRIA
arturogasca 1:5ecac6e368d2 113
arturogasca 1:5ecac6e368d2 114 PulseOximeter pox;
AVELARDEV 0:80ecccd27646 115
AVELARDEV 0:80ecccd27646 116 bool newValueMAX30100 = 0;
AVELARDEV 0:80ecccd27646 117 float heartRate;
AVELARDEV 0:80ecccd27646 118 float finalHeartRate;
AVELARDEV 0:80ecccd27646 119 uint8_t sp02;
AVELARDEV 0:80ecccd27646 120 uint16_t finalSp02;
AVELARDEV 0:80ecccd27646 121 std::vector<float> valuesHeartRate;
AVELARDEV 0:80ecccd27646 122 std::vector<uint8_t> valuesSp02;
arturogasca 1:5ecac6e368d2 123
arturogasca 1:5ecac6e368d2 124 uint32_t REPORTING_PERIOD_MS = 1000;
AVELARDEV 0:80ecccd27646 125 uint8_t samplesMAX30100 = 10;
AVELARDEV 0:80ecccd27646 126 uint8_t counterMAX30100 = 0;;
arturogasca 1:5ecac6e368d2 127 /////////////////////////////////////////////////////////////////
AVELARDEV 0:80ecccd27646 128
arturogasca 1:5ecac6e368d2 129 Serial pc(SERIAL_TX, SERIAL_RX);
arturogasca 1:5ecac6e368d2 130
arturogasca 1:5ecac6e368d2 131 DigitalOut led1(LED_R);
arturogasca 1:5ecac6e368d2 132 DigitalOut led2(LED_N);
arturogasca 1:5ecac6e368d2 133
arturogasca 1:5ecac6e368d2 134
arturogasca 1:5ecac6e368d2 135
arturogasca 1:5ecac6e368d2 136
arturogasca 1:5ecac6e368d2 137
arturogasca 1:5ecac6e368d2 138
arturogasca 1:5ecac6e368d2 139 FILE *fp;
arturogasca 1:5ecac6e368d2 140
arturogasca 1:5ecac6e368d2 141
arturogasca 1:5ecac6e368d2 142
arturogasca 1:5ecac6e368d2 143
arturogasca 1:5ecac6e368d2 144 /////////////////////////////////////////////////////////////////////////////////////
arturogasca 1:5ecac6e368d2 145
arturogasca 1:5ecac6e368d2 146
arturogasca 1:5ecac6e368d2 147 //////////////Declaracion de funciones/////////////////////////
arturogasca 1:5ecac6e368d2 148 void onBeatDetected();
arturogasca 1:5ecac6e368d2 149 void CadaSegundo() ;
arturogasca 1:5ecac6e368d2 150 void TiempoSample();
arturogasca 1:5ecac6e368d2 151 bool inicia_sd();
arturogasca 1:5ecac6e368d2 152 bool setup();
arturogasca 1:5ecac6e368d2 153 void do_remove(const char *fsrc);
arturogasca 1:5ecac6e368d2 154 void getOxi();
arturogasca 1:5ecac6e368d2 155 void getTemp();
arturogasca 1:5ecac6e368d2 156 void registraSamples();
arturogasca 1:5ecac6e368d2 157 void registraSensores();
arturogasca 1:5ecac6e368d2 158 void getSample_ECG();
arturogasca 1:5ecac6e368d2 159 void getSample_RESP();
arturogasca 1:5ecac6e368d2 160 void getSample_AXIS();
arturogasca 1:5ecac6e368d2 161 void write_ECG_file();
arturogasca 1:5ecac6e368d2 162 void write_AXIS_file();
arturogasca 1:5ecac6e368d2 163 void updateSensors ();
arturogasca 1:5ecac6e368d2 164
arturogasca 1:5ecac6e368d2 165
arturogasca 1:5ecac6e368d2 166
arturogasca 1:5ecac6e368d2 167
arturogasca 1:5ecac6e368d2 168 /////////////////////////////////////////////////////
arturogasca 1:5ecac6e368d2 169
arturogasca 1:5ecac6e368d2 170
arturogasca 1:5ecac6e368d2 171
arturogasca 1:5ecac6e368d2 172
arturogasca 1:5ecac6e368d2 173 void waitEvent()
arturogasca 1:5ecac6e368d2 174 {
arturogasca 1:5ecac6e368d2 175 if(BLE_DATA_AVAILABLE)
arturogasca 1:5ecac6e368d2 176 {
arturogasca 1:5ecac6e368d2 177 BLE_DATA_AVAILABLE = false;
arturogasca 1:5ecac6e368d2 178
arturogasca 1:5ecac6e368d2 179 switch(datosBle[0])
arturogasca 1:5ecac6e368d2 180 {
arturogasca 1:5ecac6e368d2 181 case '1': DEBUG("Recibi 1\r\n");
arturogasca 1:5ecac6e368d2 182 {
arturogasca 1:5ecac6e368d2 183 break;
arturogasca 1:5ecac6e368d2 184 }
arturogasca 1:5ecac6e368d2 185 case '2': DEBUG("Recibi 2\r\n");
arturogasca 1:5ecac6e368d2 186 {
arturogasca 1:5ecac6e368d2 187 break;
arturogasca 1:5ecac6e368d2 188 }
arturogasca 1:5ecac6e368d2 189 case '3': DEBUG("Recibi 3\r\n");
arturogasca 1:5ecac6e368d2 190 {
arturogasca 1:5ecac6e368d2 191 break;
arturogasca 1:5ecac6e368d2 192 }
arturogasca 1:5ecac6e368d2 193 case '4': DEBUG("Recibi 4\r\n");
arturogasca 1:5ecac6e368d2 194 {
arturogasca 1:5ecac6e368d2 195 break;
arturogasca 1:5ecac6e368d2 196 }
arturogasca 1:5ecac6e368d2 197 }
arturogasca 1:5ecac6e368d2 198
arturogasca 1:5ecac6e368d2 199 }
arturogasca 1:5ecac6e368d2 200 }
arturogasca 1:5ecac6e368d2 201
arturogasca 1:5ecac6e368d2 202
arturogasca 1:5ecac6e368d2 203
arturogasca 1:5ecac6e368d2 204 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
arturogasca 1:5ecac6e368d2 205 {
arturogasca 1:5ecac6e368d2 206 led2=0;
arturogasca 1:5ecac6e368d2 207 ble.startAdvertising();
arturogasca 1:5ecac6e368d2 208 BLE_AVAILABLE = false;
arturogasca 1:5ecac6e368d2 209 }
arturogasca 1:5ecac6e368d2 210 void connectionCallback(const Gap::ConnectionCallbackParams_t *params)
arturogasca 1:5ecac6e368d2 211 {
arturogasca 1:5ecac6e368d2 212 BLE_TIMEOUT = false;
arturogasca 1:5ecac6e368d2 213 led2=1;
arturogasca 1:5ecac6e368d2 214 }
arturogasca 1:5ecac6e368d2 215
arturogasca 1:5ecac6e368d2 216
arturogasca 1:5ecac6e368d2 217 void onDataWritten(const GattWriteCallbackParams *params)
arturogasca 1:5ecac6e368d2 218 {
arturogasca 1:5ecac6e368d2 219 if ((uartServicePtr != NULL) && (params->handle == uartServicePtr->getTXCharacteristicHandle())) {
arturogasca 1:5ecac6e368d2 220 uint16_t bytesRead = params->len;
arturogasca 1:5ecac6e368d2 221 pc.printf("received %u bytes\r\n", bytesRead);
arturogasca 1:5ecac6e368d2 222
arturogasca 1:5ecac6e368d2 223 for(int i=0;i<bytesRead;i++){
arturogasca 1:5ecac6e368d2 224
arturogasca 1:5ecac6e368d2 225 datosBle[i] = params->data[i];
arturogasca 1:5ecac6e368d2 226
arturogasca 1:5ecac6e368d2 227 }
arturogasca 1:5ecac6e368d2 228 BLE_DATA_AVAILABLE = true;
arturogasca 1:5ecac6e368d2 229 }
arturogasca 1:5ecac6e368d2 230 }
arturogasca 1:5ecac6e368d2 231
arturogasca 1:5ecac6e368d2 232
arturogasca 1:5ecac6e368d2 233 /*
arturogasca 1:5ecac6e368d2 234 void inicia_ble()
arturogasca 1:5ecac6e368d2 235 {
arturogasca 1:5ecac6e368d2 236 t1.attach(&CadaSegundo,1);
arturogasca 1:5ecac6e368d2 237 t2.attach(&TiempoSample,0.01);
arturogasca 1:5ecac6e368d2 238 pc.printf("Initialising the nRF51822\n\r");
arturogasca 1:5ecac6e368d2 239 ble.init();
arturogasca 1:5ecac6e368d2 240 ble.onDisconnection(disconnectionCallback);
arturogasca 1:5ecac6e368d2 241 ble.onDataWritten(onDataWritten);
arturogasca 1:5ecac6e368d2 242
arturogasca 1:5ecac6e368d2 243 /// setup advertising
arturogasca 1:5ecac6e368d2 244 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
arturogasca 1:5ecac6e368d2 245 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
arturogasca 1:5ecac6e368d2 246 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
arturogasca 1:5ecac6e368d2 247 (const uint8_t *)bleName, strlen(bleName));
arturogasca 1:5ecac6e368d2 248 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
arturogasca 1:5ecac6e368d2 249 (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
arturogasca 1:5ecac6e368d2 250
arturogasca 1:5ecac6e368d2 251 ble.setAdvertisingInterval(160); // 100ms; in multiples of 0.625ms.
arturogasca 1:5ecac6e368d2 252 ble.startAdvertising();
arturogasca 1:5ecac6e368d2 253
arturogasca 1:5ecac6e368d2 254 UARTService uartService(ble);
arturogasca 1:5ecac6e368d2 255 uartServicePtr = &uartService;
arturogasca 1:5ecac6e368d2 256
arturogasca 1:5ecac6e368d2 257 }
arturogasca 1:5ecac6e368d2 258 */
arturogasca 1:5ecac6e368d2 259
arturogasca 1:5ecac6e368d2 260 void blink1(int times1, float wait1)
arturogasca 1:5ecac6e368d2 261 {
arturogasca 1:5ecac6e368d2 262 for(int b =0; b< times1; b++)
arturogasca 1:5ecac6e368d2 263 {
arturogasca 1:5ecac6e368d2 264 led1= 1;
arturogasca 1:5ecac6e368d2 265 wait(wait1);
arturogasca 1:5ecac6e368d2 266 led1 =0 ;
arturogasca 1:5ecac6e368d2 267 wait(wait1);
arturogasca 1:5ecac6e368d2 268 }
arturogasca 1:5ecac6e368d2 269 }
arturogasca 1:5ecac6e368d2 270 void blink2(int times2, float wait2)
arturogasca 1:5ecac6e368d2 271 {
arturogasca 1:5ecac6e368d2 272 for(int a =0; a< times2; a++)
arturogasca 1:5ecac6e368d2 273 {
arturogasca 1:5ecac6e368d2 274 led2= 1;
arturogasca 1:5ecac6e368d2 275 wait(wait2);
arturogasca 1:5ecac6e368d2 276 led2 =0 ;
arturogasca 1:5ecac6e368d2 277 wait(wait2);
arturogasca 1:5ecac6e368d2 278 }
arturogasca 1:5ecac6e368d2 279 }
arturogasca 1:5ecac6e368d2 280
arturogasca 1:5ecac6e368d2 281
arturogasca 1:5ecac6e368d2 282
arturogasca 1:5ecac6e368d2 283 /////////////////////////////////////////////////////////////////////////////////////
arturogasca 1:5ecac6e368d2 284
arturogasca 1:5ecac6e368d2 285
arturogasca 1:5ecac6e368d2 286 int main()
arturogasca 1:5ecac6e368d2 287 {
arturogasca 1:5ecac6e368d2 288
arturogasca 1:5ecac6e368d2 289 pc.printf("Inicio main\n\r");
arturogasca 1:5ecac6e368d2 290 blink1(4,0.1);
arturogasca 1:5ecac6e368d2 291 blink2(8,0.2);
arturogasca 1:5ecac6e368d2 292
arturogasca 1:5ecac6e368d2 293 //t1.attach(&CadaSegundo,1);
arturogasca 1:5ecac6e368d2 294 //t2.attach(&TiempoSample,0.01);
arturogasca 1:5ecac6e368d2 295
arturogasca 1:5ecac6e368d2 296 pc.printf("Initialising the nRF51822\n\r");
arturogasca 1:5ecac6e368d2 297 ble.init();
arturogasca 1:5ecac6e368d2 298 ble.onDisconnection(disconnectionCallback);
arturogasca 1:5ecac6e368d2 299 ble.onConnection(connectionCallback);
arturogasca 1:5ecac6e368d2 300 ble.onDataWritten(onDataWritten);
arturogasca 1:5ecac6e368d2 301
arturogasca 1:5ecac6e368d2 302 //setup advertising
arturogasca 1:5ecac6e368d2 303 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
arturogasca 1:5ecac6e368d2 304 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
arturogasca 1:5ecac6e368d2 305 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
arturogasca 1:5ecac6e368d2 306 (const uint8_t *)bleName, strlen(bleName));
arturogasca 1:5ecac6e368d2 307 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
arturogasca 1:5ecac6e368d2 308 (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
arturogasca 1:5ecac6e368d2 309
arturogasca 1:5ecac6e368d2 310 ble.setAdvertisingInterval(160); // 100ms; in multiples of 0.625ms.
arturogasca 1:5ecac6e368d2 311 ble.startAdvertising();
arturogasca 1:5ecac6e368d2 312
arturogasca 1:5ecac6e368d2 313 UARTService uartService(ble);
arturogasca 1:5ecac6e368d2 314 uartServicePtr = &uartService;
arturogasca 1:5ecac6e368d2 315
arturogasca 1:5ecac6e368d2 316
arturogasca 1:5ecac6e368d2 317
arturogasca 1:5ecac6e368d2 318
arturogasca 1:5ecac6e368d2 319 //inicia_ble();
arturogasca 1:5ecac6e368d2 320
arturogasca 1:5ecac6e368d2 321 if(setup())
arturogasca 1:5ecac6e368d2 322 pc.printf("Sensores Inicializados\r\n");
arturogasca 1:5ecac6e368d2 323 else
arturogasca 1:5ecac6e368d2 324 pc.printf("Error en inicializacion\r\n");
arturogasca 1:5ecac6e368d2 325
arturogasca 1:5ecac6e368d2 326
arturogasca 1:5ecac6e368d2 327 pc.printf("Inicio del programa\r\n");
arturogasca 1:5ecac6e368d2 328
arturogasca 1:5ecac6e368d2 329 while(BLE_AVAILABLE)
arturogasca 1:5ecac6e368d2 330 {
arturogasca 1:5ecac6e368d2 331 ble.waitForEvent();
arturogasca 1:5ecac6e368d2 332 waitEvent();
arturogasca 1:5ecac6e368d2 333 }
arturogasca 1:5ecac6e368d2 334
arturogasca 1:5ecac6e368d2 335 while(1) {
arturogasca 1:5ecac6e368d2 336 updateSensors();
arturogasca 1:5ecac6e368d2 337 led1 = !led1;
arturogasca 1:5ecac6e368d2 338 wait(0.2);
arturogasca 1:5ecac6e368d2 339 }
arturogasca 1:5ecac6e368d2 340
arturogasca 1:5ecac6e368d2 341
arturogasca 1:5ecac6e368d2 342 }
arturogasca 1:5ecac6e368d2 343
arturogasca 1:5ecac6e368d2 344
arturogasca 1:5ecac6e368d2 345
arturogasca 1:5ecac6e368d2 346
arturogasca 1:5ecac6e368d2 347
arturogasca 1:5ecac6e368d2 348
arturogasca 1:5ecac6e368d2 349
arturogasca 1:5ecac6e368d2 350 // Callback (registered below) fired when a pulse is detected
arturogasca 1:5ecac6e368d2 351
arturogasca 1:5ecac6e368d2 352 void onBeatDetected()
arturogasca 1:5ecac6e368d2 353 {
arturogasca 1:5ecac6e368d2 354 // pc.printf("Beat!\r\n");
arturogasca 1:5ecac6e368d2 355 }
arturogasca 1:5ecac6e368d2 356
arturogasca 1:5ecac6e368d2 357 void CadaSegundo() //Aumenta dos contadores cada segundo para registro y actualizacion
arturogasca 1:5ecac6e368d2 358 {
arturogasca 1:5ecac6e368d2 359 RegisterSeconds++;
arturogasca 1:5ecac6e368d2 360 UpdateSeconds++;
arturogasca 1:5ecac6e368d2 361 if(BLE_TIMEOUT){
arturogasca 1:5ecac6e368d2 362 BleSeconds++;
arturogasca 1:5ecac6e368d2 363 pc.printf("timeout: %d\r\n",BleSeconds);
arturogasca 1:5ecac6e368d2 364 if(BleSeconds == WAIT_CONECTION_TIMEOUT){
arturogasca 1:5ecac6e368d2 365 BLE_AVAILABLE = false;
arturogasca 1:5ecac6e368d2 366 BLE_TIMEOUT = false;
arturogasca 1:5ecac6e368d2 367 }
arturogasca 1:5ecac6e368d2 368
arturogasca 1:5ecac6e368d2 369 }
arturogasca 1:5ecac6e368d2 370
arturogasca 1:5ecac6e368d2 371 }
arturogasca 1:5ecac6e368d2 372 void TiempoSample() //Timer para samples de Ritmocardiaco,Respiracion y acelerometro
arturogasca 1:5ecac6e368d2 373 {
arturogasca 1:5ecac6e368d2 374 SampleTime = true;
arturogasca 1:5ecac6e368d2 375 }
arturogasca 1:5ecac6e368d2 376 bool inicia_sd()
arturogasca 1:5ecac6e368d2 377 {
arturogasca 1:5ecac6e368d2 378 bool response;
arturogasca 1:5ecac6e368d2 379
arturogasca 1:5ecac6e368d2 380 /* fp = fopen(PathSensores, "a"); //Intento abrir el archivo... "append"
arturogasca 1:5ecac6e368d2 381 if(fp == NULL) {
arturogasca 1:5ecac6e368d2 382 pc.printf("No pude abrir el archivo\r\n");
arturogasca 1:5ecac6e368d2 383 archivo = false; //no existe el archivo
arturogasca 1:5ecac6e368d2 384 }
arturogasca 1:5ecac6e368d2 385 else
arturogasca 1:5ecac6e368d2 386 {
arturogasca 1:5ecac6e368d2 387 fprintf(fp, "Dispositivo reiniciado : \r\n"); //Fue un reinicio, solo se logea
arturogasca 1:5ecac6e368d2 388 pc.printf("Si existe un archivo\n");
arturogasca 1:5ecac6e368d2 389 response = true;
arturogasca 1:5ecac6e368d2 390 }
arturogasca 1:5ecac6e368d2 391 fclose(fp);
arturogasca 1:5ecac6e368d2 392
arturogasca 1:5ecac6e368d2 393 if (!archivo)
arturogasca 1:5ecac6e368d2 394 {
arturogasca 1:5ecac6e368d2 395 pc.printf("Creando Carpeta de Logs\r\n");
arturogasca 1:5ecac6e368d2 396 mkdir("/sd/LogSensores", 0777);
arturogasca 1:5ecac6e368d2 397 fp = fopen(PathSensores, "w");
arturogasca 1:5ecac6e368d2 398 if(fp == NULL)
arturogasca 1:5ecac6e368d2 399 {
arturogasca 1:5ecac6e368d2 400 pc.printf("No pude abrir el archivo log %s\r\n",PathSensores);
arturogasca 1:5ecac6e368d2 401 response = false;
arturogasca 1:5ecac6e368d2 402 }
arturogasca 1:5ecac6e368d2 403 else
arturogasca 1:5ecac6e368d2 404 {
arturogasca 1:5ecac6e368d2 405 fprintf(fp, "LOG %s creado:\r\n",PathSensores);
arturogasca 1:5ecac6e368d2 406 pc.printf("Archivo %s creado por primera vez!\r\n",PathSensores);
arturogasca 1:5ecac6e368d2 407 fclose(fp);
arturogasca 1:5ecac6e368d2 408 wait(0.2);
arturogasca 1:5ecac6e368d2 409 fp = fopen(PathECG, "w");
arturogasca 1:5ecac6e368d2 410
arturogasca 1:5ecac6e368d2 411 if(fp == NULL){
arturogasca 1:5ecac6e368d2 412 pc.printf("No pude abrir el archivo log %s\r\n",PathECG);
arturogasca 1:5ecac6e368d2 413 response = false;
arturogasca 1:5ecac6e368d2 414 }
arturogasca 1:5ecac6e368d2 415 else
arturogasca 1:5ecac6e368d2 416 {
arturogasca 1:5ecac6e368d2 417 fprintf(fp, "LOG %s creado:\r\n",PathECG);
arturogasca 1:5ecac6e368d2 418 pc.printf("Archivo %s creado por primera vez!\r\n",PathECG);
arturogasca 1:5ecac6e368d2 419 fclose(fp);
arturogasca 1:5ecac6e368d2 420
arturogasca 1:5ecac6e368d2 421 wait(0.2);
arturogasca 1:5ecac6e368d2 422 fp = fopen(PathAxis, "w");
arturogasca 1:5ecac6e368d2 423 if(fp == NULL){
arturogasca 1:5ecac6e368d2 424 pc.printf("No pude abrir el archivo log %s\r\n",PathAxis);
arturogasca 1:5ecac6e368d2 425 response = false;
arturogasca 1:5ecac6e368d2 426 }
arturogasca 1:5ecac6e368d2 427 else
arturogasca 1:5ecac6e368d2 428 {
arturogasca 1:5ecac6e368d2 429 fprintf(fp, "LOG %s creado:\r\n",PathAxis);
arturogasca 1:5ecac6e368d2 430 pc.printf("Archivo %s creado por primera vez!\r\n",PathAxis);
arturogasca 1:5ecac6e368d2 431 response = true;
arturogasca 1:5ecac6e368d2 432 }
arturogasca 1:5ecac6e368d2 433 }
arturogasca 1:5ecac6e368d2 434 fclose(fp);
arturogasca 1:5ecac6e368d2 435 }
arturogasca 1:5ecac6e368d2 436
arturogasca 1:5ecac6e368d2 437 }*/
arturogasca 1:5ecac6e368d2 438 return response;
arturogasca 1:5ecac6e368d2 439 }
arturogasca 1:5ecac6e368d2 440
arturogasca 1:5ecac6e368d2 441 bool setup()
arturogasca 1:5ecac6e368d2 442 {
arturogasca 1:5ecac6e368d2 443
arturogasca 1:5ecac6e368d2 444 pc.printf("Start program!\r\n");
arturogasca 1:5ecac6e368d2 445
arturogasca 1:5ecac6e368d2 446 //incializacion SD y archivos de log
arturogasca 1:5ecac6e368d2 447 inicia_sd();
arturogasca 1:5ecac6e368d2 448 rtcc.begin();
arturogasca 1:5ecac6e368d2 449 /* set the time (12:30:00) and date 28/nov/2016 */
arturogasca 1:5ecac6e368d2 450 // rtcc.adjust( DateTime( 2016, 10, 28, 12, 30, 0) ); //year,month,day,hour,min, sec,dow
arturogasca 1:5ecac6e368d2 451
arturogasca 1:5ecac6e368d2 452
arturogasca 1:5ecac6e368d2 453 // Initialize the PulseOximeter instance and register a beat-detected callback
arturogasca 1:5ecac6e368d2 454 if(!pox.begin())
arturogasca 1:5ecac6e368d2 455 return false;
arturogasca 1:5ecac6e368d2 456 pox.setOnBeatDetectedCallback(onBeatDetected);
arturogasca 1:5ecac6e368d2 457 return true;
arturogasca 1:5ecac6e368d2 458 }
arturogasca 1:5ecac6e368d2 459 void do_remove(const char *fsrc)
arturogasca 1:5ecac6e368d2 460 {
arturogasca 1:5ecac6e368d2 461 DIR *d = opendir(fsrc);
arturogasca 1:5ecac6e368d2 462 struct dirent *p;
arturogasca 1:5ecac6e368d2 463 char path[30] = {0};
arturogasca 1:5ecac6e368d2 464 while((p = readdir(d)) != NULL) {
arturogasca 1:5ecac6e368d2 465 strcpy(path, fsrc);
arturogasca 1:5ecac6e368d2 466 strcat(path, "/");
arturogasca 1:5ecac6e368d2 467 strcat(path, p->d_name);
arturogasca 1:5ecac6e368d2 468 remove(path);
arturogasca 1:5ecac6e368d2 469 }
arturogasca 1:5ecac6e368d2 470 closedir(d);
arturogasca 1:5ecac6e368d2 471 remove(fsrc);
arturogasca 1:5ecac6e368d2 472 }
arturogasca 1:5ecac6e368d2 473
arturogasca 1:5ecac6e368d2 474 void getOxi()
arturogasca 1:5ecac6e368d2 475 {
arturogasca 1:5ecac6e368d2 476 heartRate = pox.getHeartRate();
arturogasca 1:5ecac6e368d2 477 sp02 = pox.getSpO2();
arturogasca 1:5ecac6e368d2 478
arturogasca 1:5ecac6e368d2 479 if(heartRate != 0 && sp02 != 0) {
arturogasca 1:5ecac6e368d2 480 pc.printf("Heart rate: %f",heartRate);
arturogasca 1:5ecac6e368d2 481 pc.printf(" bpm / SpO2: %d%\r\n",sp02);
arturogasca 1:5ecac6e368d2 482 valuesHeartRate.push_back(heartRate);
arturogasca 1:5ecac6e368d2 483 valuesSp02.push_back(sp02);
arturogasca 1:5ecac6e368d2 484 counterMAX30100 ++;
arturogasca 1:5ecac6e368d2 485 } else {
arturogasca 1:5ecac6e368d2 486 pc.printf("Valor Oximetria cero\r\n");
arturogasca 1:5ecac6e368d2 487 Oxigeno = 0;
arturogasca 1:5ecac6e368d2 488 RitmoCardiaco = 0.00;
arturogasca 1:5ecac6e368d2 489 pc.printf("No finger\r\n");
arturogasca 1:5ecac6e368d2 490 }
arturogasca 1:5ecac6e368d2 491 if(samplesMAX30100 == counterMAX30100) {
arturogasca 1:5ecac6e368d2 492
arturogasca 1:5ecac6e368d2 493 finalHeartRate = 0;
arturogasca 1:5ecac6e368d2 494 finalSp02 = 0;
arturogasca 1:5ecac6e368d2 495 for(int i=0; i<samplesMAX30100; i++) {
arturogasca 1:5ecac6e368d2 496 finalHeartRate += valuesHeartRate[i];
arturogasca 1:5ecac6e368d2 497 finalSp02 += valuesSp02[i];
arturogasca 1:5ecac6e368d2 498 }
arturogasca 1:5ecac6e368d2 499
arturogasca 1:5ecac6e368d2 500 finalHeartRate /= samplesMAX30100;
arturogasca 1:5ecac6e368d2 501 finalSp02 /= samplesMAX30100;
arturogasca 1:5ecac6e368d2 502
arturogasca 1:5ecac6e368d2 503 counterMAX30100 = 0;
arturogasca 1:5ecac6e368d2 504 valuesHeartRate.clear();
arturogasca 1:5ecac6e368d2 505 valuesSp02.clear();
arturogasca 1:5ecac6e368d2 506 newValueMAX30100 = true;
arturogasca 1:5ecac6e368d2 507 }
arturogasca 1:5ecac6e368d2 508
arturogasca 1:5ecac6e368d2 509 if(newValueMAX30100) {
arturogasca 1:5ecac6e368d2 510 pc.printf("Valor Oximetria valido\r\n");
arturogasca 1:5ecac6e368d2 511 newValueMAX30100 = false;
arturogasca 1:5ecac6e368d2 512 RitmoCardiaco = finalHeartRate;
arturogasca 1:5ecac6e368d2 513 Oxigeno = finalSp02;
arturogasca 1:5ecac6e368d2 514 }
arturogasca 1:5ecac6e368d2 515 }
arturogasca 1:5ecac6e368d2 516
arturogasca 1:5ecac6e368d2 517
arturogasca 1:5ecac6e368d2 518 void getTemp()
arturogasca 1:5ecac6e368d2 519 {
arturogasca 1:5ecac6e368d2 520 Temperatura = SensorTemp.get();
arturogasca 1:5ecac6e368d2 521 }
arturogasca 1:5ecac6e368d2 522
arturogasca 1:5ecac6e368d2 523
arturogasca 1:5ecac6e368d2 524 void registraSamples()
arturogasca 1:5ecac6e368d2 525 {
arturogasca 1:5ecac6e368d2 526 //return(true);
arturogasca 1:5ecac6e368d2 527 }
arturogasca 1:5ecac6e368d2 528
arturogasca 1:5ecac6e368d2 529 void registraSensores()
arturogasca 1:5ecac6e368d2 530 {
arturogasca 1:5ecac6e368d2 531 /* pc.printf("Write sensors file\r\n");
arturogasca 1:5ecac6e368d2 532 DateTime time = rtcc.now( );
arturogasca 1:5ecac6e368d2 533 pc.printf("%d:%d:%d,%d/%s/%d\r\n",time.hour( ),time.minute( ),time.second( ),
arturogasca 1:5ecac6e368d2 534 time.day( ),months[time.month( )],time.year());
arturogasca 1:5ecac6e368d2 535 /*fp = fopen("/sd/LogSensores/sensores.txt", "a"); //"a" append
arturogasca 1:5ecac6e368d2 536 if(fp == NULL) {
arturogasca 1:5ecac6e368d2 537 pc.printf("No pude abrir! :(\r\n");
arturogasca 1:5ecac6e368d2 538 return(false);
arturogasca 1:5ecac6e368d2 539 } else {
arturogasca 1:5ecac6e368d2 540 DateTime time = rtcc.now( );
arturogasca 1:5ecac6e368d2 541 fprintf(fp,"T=%.2f,O=%d,RC=%.2f,P=%d,",Temperatura,Oxigeno,RitmoCardiaco,Pasos);
arturogasca 1:5ecac6e368d2 542 fprintf(fp,"H=%d:%d:%d,F=%d/%s/%d\r\n",time.hour( ),time.minute( ),time.second( ),
arturogasca 1:5ecac6e368d2 543 time.day( ),months[time.month( )],time.year());
arturogasca 1:5ecac6e368d2 544 fclose(fp);
arturogasca 1:5ecac6e368d2 545
arturogasca 1:5ecac6e368d2 546 pc.printf("Escribi en SD! :D \r\n");
arturogasca 1:5ecac6e368d2 547 pc.printf("T=%.2f,O=%d,RC=%.2f,P=%d,",Temperatura,Oxigeno,RitmoCardiaco,Pasos);
arturogasca 1:5ecac6e368d2 548 pc.printf("H=%d:%d:%d,F=%d/%s/%d\r\n",time.hour( ),time.minute( ),time.second( ),
arturogasca 1:5ecac6e368d2 549 time.day( ),months[time.month( )],time.year());
arturogasca 1:5ecac6e368d2 550 return(true);
arturogasca 1:5ecac6e368d2 551 }*/
arturogasca 1:5ecac6e368d2 552 }
arturogasca 1:5ecac6e368d2 553 void getSample_ECG()
arturogasca 1:5ecac6e368d2 554 {
arturogasca 1:5ecac6e368d2 555 if(HR.available())
arturogasca 1:5ecac6e368d2 556 {
arturogasca 1:5ecac6e368d2 557 ecgSamples[ecg_idx++] = HR.read();
arturogasca 1:5ecac6e368d2 558 }
arturogasca 1:5ecac6e368d2 559 else
arturogasca 1:5ecac6e368d2 560 {
arturogasca 1:5ecac6e368d2 561 ecgSamples[ecg_idx++] = 0;
arturogasca 1:5ecac6e368d2 562 }
arturogasca 1:5ecac6e368d2 563 if(ecg_idx == MUESTRAS_ECG)
arturogasca 1:5ecac6e368d2 564 {
arturogasca 1:5ecac6e368d2 565 ecg_idx =0;
arturogasca 1:5ecac6e368d2 566 ECG_SAMPLE_READY = true;
arturogasca 1:5ecac6e368d2 567 }
arturogasca 1:5ecac6e368d2 568
arturogasca 1:5ecac6e368d2 569 }
arturogasca 1:5ecac6e368d2 570
arturogasca 1:5ecac6e368d2 571 void getSample_RESP()
arturogasca 1:5ecac6e368d2 572 {
arturogasca 1:5ecac6e368d2 573 respSamples[resp_idx++] = thermistor.read_u16();
arturogasca 1:5ecac6e368d2 574
arturogasca 1:5ecac6e368d2 575 if (resp_idx == MUESTRAS_RESP)
arturogasca 1:5ecac6e368d2 576 {
arturogasca 1:5ecac6e368d2 577 resp_idx = 0;
arturogasca 1:5ecac6e368d2 578 RESP_SAMPLE_READY = true;
arturogasca 1:5ecac6e368d2 579 }
arturogasca 1:5ecac6e368d2 580 }
arturogasca 1:5ecac6e368d2 581
arturogasca 1:5ecac6e368d2 582 void getSample_AXIS()
arturogasca 1:5ecac6e368d2 583 {
arturogasca 1:5ecac6e368d2 584 float x, y, z;
arturogasca 1:5ecac6e368d2 585 x = abs(acc.getAccX());
arturogasca 1:5ecac6e368d2 586 y = abs(acc.getAccY());
arturogasca 1:5ecac6e368d2 587 z = abs(acc.getAccZ());
arturogasca 1:5ecac6e368d2 588
arturogasca 1:5ecac6e368d2 589 axisSamples[axis_idx][0] = x;
arturogasca 1:5ecac6e368d2 590 axisSamples[axis_idx][1] = y;
arturogasca 1:5ecac6e368d2 591 axisSamples[axis_idx][2] = z;
arturogasca 1:5ecac6e368d2 592
arturogasca 1:5ecac6e368d2 593 axis_idx++;
arturogasca 1:5ecac6e368d2 594
arturogasca 1:5ecac6e368d2 595 if (axis_idx == MUESTRAS_AXIS)
arturogasca 1:5ecac6e368d2 596 {
arturogasca 1:5ecac6e368d2 597 axis_idx = 0;
arturogasca 1:5ecac6e368d2 598 AXIS_SAMPLE_READY = true;
arturogasca 1:5ecac6e368d2 599 }
arturogasca 1:5ecac6e368d2 600 }
arturogasca 1:5ecac6e368d2 601
arturogasca 1:5ecac6e368d2 602 void write_ECG_file()
arturogasca 1:5ecac6e368d2 603 {
arturogasca 1:5ecac6e368d2 604 bool response;
arturogasca 1:5ecac6e368d2 605 /*pc.printf("Write ECG file\r\n");
arturogasca 1:5ecac6e368d2 606 DateTime time = rtcc.now( );
arturogasca 1:5ecac6e368d2 607 pc.printf("%d:%d:%d,%d/%s/%d\r\n",time.hour( ),time.minute( ),time.second( ),
arturogasca 1:5ecac6e368d2 608 time.day( ),months[time.month( )],time.year());
arturogasca 1:5ecac6e368d2 609 /*if(true)
arturogasca 1:5ecac6e368d2 610 {
arturogasca 1:5ecac6e368d2 611 fp = fopen(PathECG, "a"); //"a" append
arturogasca 1:5ecac6e368d2 612 if(fp == NULL)
arturogasca 1:5ecac6e368d2 613 {
arturogasca 1:5ecac6e368d2 614 pc.printf("No pude abrir! :(\r\n");
arturogasca 1:5ecac6e368d2 615 response =false;
arturogasca 1:5ecac6e368d2 616 }
arturogasca 1:5ecac6e368d2 617 else
arturogasca 1:5ecac6e368d2 618 {
arturogasca 1:5ecac6e368d2 619 DateTime time = rtcc.now( );
arturogasca 1:5ecac6e368d2 620 fprintf(fp,"%d:%d:%d,%d/%s/%d\r\n",time.hour( ),time.minute( ),time.second( ),
arturogasca 1:5ecac6e368d2 621 time.day( ),months[time.month( )],time.year());
arturogasca 1:5ecac6e368d2 622
arturogasca 1:5ecac6e368d2 623 for (int i =0; i< MUESTRAS_ECG; i++)
arturogasca 1:5ecac6e368d2 624 {
arturogasca 1:5ecac6e368d2 625 fprintf(fp,"%d",ecgSamples[i]);
arturogasca 1:5ecac6e368d2 626 }
arturogasca 1:5ecac6e368d2 627
arturogasca 1:5ecac6e368d2 628 pc.printf("Escribi en SD! :D \r\n");
arturogasca 1:5ecac6e368d2 629 response = true;
arturogasca 1:5ecac6e368d2 630
arturogasca 1:5ecac6e368d2 631 }
arturogasca 1:5ecac6e368d2 632 fclose(fp);
arturogasca 1:5ecac6e368d2 633 }*/
arturogasca 1:5ecac6e368d2 634 //return response;
arturogasca 1:5ecac6e368d2 635
arturogasca 1:5ecac6e368d2 636 }
arturogasca 1:5ecac6e368d2 637
arturogasca 1:5ecac6e368d2 638 void write_AXIS_file()
arturogasca 1:5ecac6e368d2 639 {
arturogasca 1:5ecac6e368d2 640 bool response;
arturogasca 1:5ecac6e368d2 641 /* pc.printf("Write axis file\r\n");
arturogasca 1:5ecac6e368d2 642 DateTime time = rtcc.now( );
arturogasca 1:5ecac6e368d2 643 pc.printf("%d:%d:%d,%d/%s/%d\r\n",time.hour( ),time.minute( ),time.second( ),
arturogasca 1:5ecac6e368d2 644 time.day( ),months[time.month( )],time.year());
arturogasca 1:5ecac6e368d2 645 /* fp = fopen(PathAxis, "a"); //"a" append
arturogasca 1:5ecac6e368d2 646 if(fp == NULL)
arturogasca 1:5ecac6e368d2 647 {
arturogasca 1:5ecac6e368d2 648 pc.printf("No pude abrir! :(\r\n");
arturogasca 1:5ecac6e368d2 649 response = false;
arturogasca 1:5ecac6e368d2 650 }
arturogasca 1:5ecac6e368d2 651 else
arturogasca 1:5ecac6e368d2 652 {
arturogasca 1:5ecac6e368d2 653 DateTime time = rtcc.now( );
arturogasca 1:5ecac6e368d2 654 fprintf(fp,"%d:%d:%d,%d/%s/%d\r\n",time.hour( ),time.minute( ),time.second( ),
arturogasca 1:5ecac6e368d2 655 time.day( ),months[time.month( )],time.year());
arturogasca 1:5ecac6e368d2 656
arturogasca 1:5ecac6e368d2 657 for (int i =0; i< MUESTRAS_AXIS; i++)
arturogasca 1:5ecac6e368d2 658 {
arturogasca 1:5ecac6e368d2 659 fprintf(fp,"%1.2f,%1.2f,%1.2f",axisSamples[0][i],axisSamples[1][i],axisSamples[2][i]);
arturogasca 1:5ecac6e368d2 660 }
arturogasca 1:5ecac6e368d2 661
arturogasca 1:5ecac6e368d2 662 pc.printf("Escribi en SD! :D \r\n");
arturogasca 1:5ecac6e368d2 663 response = true;
arturogasca 1:5ecac6e368d2 664 }
arturogasca 1:5ecac6e368d2 665 fclose(fp);*/
arturogasca 1:5ecac6e368d2 666 //return response;
arturogasca 1:5ecac6e368d2 667 }
arturogasca 1:5ecac6e368d2 668
arturogasca 1:5ecac6e368d2 669
arturogasca 1:5ecac6e368d2 670
arturogasca 1:5ecac6e368d2 671 void updateSensors ()
arturogasca 1:5ecac6e368d2 672 {
AVELARDEV 0:80ecccd27646 673 // Make sure to call update as fast as possible
AVELARDEV 0:80ecccd27646 674 pox.update();
AVELARDEV 0:80ecccd27646 675
arturogasca 1:5ecac6e368d2 676 //<-Get Step Accel
arturogasca 1:5ecac6e368d2 677
arturogasca 1:5ecac6e368d2 678 if(SampleTime){
arturogasca 1:5ecac6e368d2 679 //cuando se cumpla el tiempo...obtener 1 muestra y aumentar contador
arturogasca 1:5ecac6e368d2 680 //getSample ECG
arturogasca 1:5ecac6e368d2 681 //getSample Respiracion
arturogasca 1:5ecac6e368d2 682 //getSample Axis
AVELARDEV 0:80ecccd27646 683
arturogasca 1:5ecac6e368d2 684 getSample_ECG();
arturogasca 1:5ecac6e368d2 685 getSample_RESP();
arturogasca 1:5ecac6e368d2 686 getSample_AXIS();
arturogasca 1:5ecac6e368d2 687 SampleTime = false;
arturogasca 1:5ecac6e368d2 688 }
arturogasca 1:5ecac6e368d2 689 if (ECG_SAMPLE_READY)
arturogasca 1:5ecac6e368d2 690 {
arturogasca 1:5ecac6e368d2 691 ECG_SAMPLE_READY = false;
arturogasca 1:5ecac6e368d2 692 write_ECG_file();
arturogasca 1:5ecac6e368d2 693 //escribir todas las muestras en SD y borrar contador
arturogasca 1:5ecac6e368d2 694 }
arturogasca 1:5ecac6e368d2 695 if (AXIS_SAMPLE_READY)
arturogasca 1:5ecac6e368d2 696 {
arturogasca 1:5ecac6e368d2 697 AXIS_SAMPLE_READY = false;
arturogasca 1:5ecac6e368d2 698 write_AXIS_file();
arturogasca 1:5ecac6e368d2 699 //escribir todas las muestras en SD y borrar contador
arturogasca 1:5ecac6e368d2 700 }
arturogasca 1:5ecac6e368d2 701 if (RESP_SAMPLE_READY);
arturogasca 1:5ecac6e368d2 702 {
arturogasca 1:5ecac6e368d2 703 RESP_SAMPLE_READY = false;
arturogasca 1:5ecac6e368d2 704 //Analisis de datos para deteccion de picos
arturogasca 1:5ecac6e368d2 705 //escribir todas lasmuestras en SD y borrar contador
arturogasca 1:5ecac6e368d2 706 }
arturogasca 1:5ecac6e368d2 707 if (UpdateSeconds >= UPDATE_TIME) { //Si ya paso el tiempo definido en UPDATE_TIME
arturogasca 1:5ecac6e368d2 708 getOxi();
arturogasca 1:5ecac6e368d2 709 getTemp();
arturogasca 1:5ecac6e368d2 710 UpdateSeconds = 0;
arturogasca 1:5ecac6e368d2 711 }
arturogasca 1:5ecac6e368d2 712 if (RegisterSeconds >= REGISTER_TIME) { //Si ya paso el tiempo definido en REGISTER_TIME
AVELARDEV 0:80ecccd27646 713
arturogasca 1:5ecac6e368d2 714 registraSensores();
arturogasca 1:5ecac6e368d2 715 RegisterSeconds = 0;
AVELARDEV 0:80ecccd27646 716 }
AVELARDEV 0:80ecccd27646 717 }