Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@3:a7396ed925e6, 2019-10-14 (annotated)
- Committer:
- socrj
- Date:
- Mon Oct 14 09:45:36 2019 +0000
- Revision:
- 3:a7396ed925e6
- Parent:
- 2:17d5a74fc2c4
- Child:
- 7:188bf08cfb44
low power and smth
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AhmadAlkaff | 0:7b5d37ca532f | 1 | #include "mbed.h" |
AhmadAlkaff | 1:e4a32b4163f2 | 2 | #include "BMP280.h" |
AhmadAlkaff | 1:e4a32b4163f2 | 3 | #include "LIS2DH.h" |
AhmadAlkaff | 0:7b5d37ca532f | 4 | #include "MAX14720.h" |
AhmadAlkaff | 0:7b5d37ca532f | 5 | #include "MAX30001.h" |
AhmadAlkaff | 1:e4a32b4163f2 | 6 | #include "MAX30101.h" |
AhmadAlkaff | 1:e4a32b4163f2 | 7 | #include "MAX30205.h" |
AhmadAlkaff | 0:7b5d37ca532f | 8 | #include "System.h" |
AhmadAlkaff | 0:7b5d37ca532f | 9 | #include "USBSerial.h" |
AhmadAlkaff | 0:7b5d37ca532f | 10 | |
AhmadAlkaff | 0:7b5d37ca532f | 11 | /************************************************************************************************************************************/ |
AhmadAlkaff | 0:7b5d37ca532f | 12 | // define the HVOUT Boost Voltage default for the MAX14720 PMIC |
AhmadAlkaff | 0:7b5d37ca532f | 13 | #define HVOUT_VOLTAGE 4500 // set to 4500 mV |
AhmadAlkaff | 0:7b5d37ca532f | 14 | |
AhmadAlkaff | 0:7b5d37ca532f | 15 | // define all I2C addresses |
AhmadAlkaff | 0:7b5d37ca532f | 16 | #define LIS2DH_I2C_SLAVE_ADDR (0x32) |
AhmadAlkaff | 0:7b5d37ca532f | 17 | #define MAX14720_I2C_SLAVE_ADDR (0x54) |
AhmadAlkaff | 0:7b5d37ca532f | 18 | #define MAX30101_I2C_SLAVE_ADDR (0xAE) |
AhmadAlkaff | 1:e4a32b4163f2 | 19 | #define MAX30205_I2C_SLAVE_ADDR_BOTTOM (0x90) |
AhmadAlkaff | 1:e4a32b4163f2 | 20 | #define MAX30205_I2C_SLAVE_ADDR_TOP (0x92) |
AhmadAlkaff | 1:e4a32b4163f2 | 21 | #define BMP280_I2C_SLAVE_ADDR (0xEC) |
AhmadAlkaff | 0:7b5d37ca532f | 22 | |
AhmadAlkaff | 0:7b5d37ca532f | 23 | // Settings for ECG Initialization |
AhmadAlkaff | 0:7b5d37ca532f | 24 | #define En_ecg 0x01 |
AhmadAlkaff | 0:7b5d37ca532f | 25 | #define Openp 0x00 |
AhmadAlkaff | 0:7b5d37ca532f | 26 | #define Openn 0x00 |
AhmadAlkaff | 0:7b5d37ca532f | 27 | #define Pol 0x00 |
AhmadAlkaff | 0:7b5d37ca532f | 28 | #define Calp_sel 0x00 |
AhmadAlkaff | 0:7b5d37ca532f | 29 | #define Caln_sel 0x00 |
AhmadAlkaff | 0:7b5d37ca532f | 30 | #define E_fit 0x0F |
AhmadAlkaff | 0:7b5d37ca532f | 31 | #define Rate 0x02 |
AhmadAlkaff | 0:7b5d37ca532f | 32 | #define Gain 0x00 |
AhmadAlkaff | 0:7b5d37ca532f | 33 | #define Dhpf 0x01 |
AhmadAlkaff | 0:7b5d37ca532f | 34 | #define Dlpf 0x01 |
AhmadAlkaff | 0:7b5d37ca532f | 35 | |
AhmadAlkaff | 0:7b5d37ca532f | 36 | // Settings for ECG RtoR |
AhmadAlkaff | 0:7b5d37ca532f | 37 | #define En_rtor 0x01 |
AhmadAlkaff | 0:7b5d37ca532f | 38 | #define Wndw 0x03 |
AhmadAlkaff | 0:7b5d37ca532f | 39 | #define Gain1 0x0f |
AhmadAlkaff | 0:7b5d37ca532f | 40 | #define Pavg 0x02 |
AhmadAlkaff | 0:7b5d37ca532f | 41 | #define Ptsf 0x03 |
AhmadAlkaff | 0:7b5d37ca532f | 42 | #define Hoff 0x20 |
AhmadAlkaff | 0:7b5d37ca532f | 43 | #define Ravg 0x02 |
AhmadAlkaff | 0:7b5d37ca532f | 44 | #define Rhsf 0x04 |
AhmadAlkaff | 0:7b5d37ca532f | 45 | #define Clr_rrint 0x01 |
AhmadAlkaff | 0:7b5d37ca532f | 46 | |
AhmadAlkaff | 0:7b5d37ca532f | 47 | // Settings for Lead Detection |
AhmadAlkaff | 0:7b5d37ca532f | 48 | #define En_dcloff 0x01 |
AhmadAlkaff | 0:7b5d37ca532f | 49 | #define Ipol 0x00 |
AhmadAlkaff | 0:7b5d37ca532f | 50 | #define Imag 0x00 |
AhmadAlkaff | 0:7b5d37ca532f | 51 | #define Vth 0x00 |
AhmadAlkaff | 0:7b5d37ca532f | 52 | |
AhmadAlkaff | 0:7b5d37ca532f | 53 | // Settings for the HR initialization |
AhmadAlkaff | 0:7b5d37ca532f | 54 | #define FIFO_WATERLEVEL_MARK 15 |
AhmadAlkaff | 0:7b5d37ca532f | 55 | #define SAMPLE_AVG 2 |
AhmadAlkaff | 0:7b5d37ca532f | 56 | #define SAMPLE_RATE 1 |
AhmadAlkaff | 0:7b5d37ca532f | 57 | #define PULSE_WIDTH 2 |
AhmadAlkaff | 0:7b5d37ca532f | 58 | #define RED_LED_CURRENT 0x1F |
AhmadAlkaff | 0:7b5d37ca532f | 59 | #define IR_LED_CURRENT 0X1F |
AhmadAlkaff | 0:7b5d37ca532f | 60 | |
AhmadAlkaff | 0:7b5d37ca532f | 61 | // Define with Maxim VID and a Maxim assigned PID, set to version 0x0001 and non-blocking |
AhmadAlkaff | 0:7b5d37ca532f | 62 | USBSerial usbSerial(0x0b6a, 0x0100, 0x0001, false); |
AhmadAlkaff | 0:7b5d37ca532f | 63 | |
AhmadAlkaff | 0:7b5d37ca532f | 64 | // I2C Masters |
AhmadAlkaff | 2:17d5a74fc2c4 | 65 | I2C i2c1(I2C1_SDA, I2C1_SCL); // used by MAX30205, BMP280 |
AhmadAlkaff | 0:7b5d37ca532f | 66 | I2C i2c2(I2C2_SDA, I2C2_SCL); // used by MAX14720, MAX30101, LIS2DH |
AhmadAlkaff | 0:7b5d37ca532f | 67 | |
AhmadAlkaff | 0:7b5d37ca532f | 68 | // SPI Master 0 with SPI0_SS for use with MAX30001 |
AhmadAlkaff | 0:7b5d37ca532f | 69 | SPI spi(SPI0_MOSI, SPI0_MISO, SPI0_SCK, SPI0_SS); |
AhmadAlkaff | 0:7b5d37ca532f | 70 | |
AhmadAlkaff | 0:7b5d37ca532f | 71 | // PMIC |
AhmadAlkaff | 0:7b5d37ca532f | 72 | MAX14720 max14720(&i2c2, MAX14720_I2C_SLAVE_ADDR); |
AhmadAlkaff | 0:7b5d37ca532f | 73 | |
AhmadAlkaff | 0:7b5d37ca532f | 74 | // Optical Oximeter |
AhmadAlkaff | 2:17d5a74fc2c4 | 75 | MAX30101 max30101(&i2c2, MAX30101_I2C_SLAVE_ADDR); |
AhmadAlkaff | 2:17d5a74fc2c4 | 76 | InterruptIn max30101_Interrupt(P4_0); |
AhmadAlkaff | 0:7b5d37ca532f | 77 | |
AhmadAlkaff | 0:7b5d37ca532f | 78 | // Accelerometer |
AhmadAlkaff | 2:17d5a74fc2c4 | 79 | LIS2DH lis2dh(&i2c2, LIS2DH_I2C_SLAVE_ADDR); |
AhmadAlkaff | 2:17d5a74fc2c4 | 80 | InterruptIn lis2dh_Interrupt(P4_7); |
AhmadAlkaff | 0:7b5d37ca532f | 81 | |
AhmadAlkaff | 0:7b5d37ca532f | 82 | // Barometric Pressure Sensor |
AhmadAlkaff | 2:17d5a74fc2c4 | 83 | BMP280 bmp280_pres(&i2c1, BMP280_I2C_SLAVE_ADDR); |
AhmadAlkaff | 0:7b5d37ca532f | 84 | |
AhmadAlkaff | 0:7b5d37ca532f | 85 | // Top Temperature Sensor |
AhmadAlkaff | 2:17d5a74fc2c4 | 86 | MAX30205 MAX30205_top(&i2c1, MAX30205_I2C_SLAVE_ADDR_TOP); |
AhmadAlkaff | 0:7b5d37ca532f | 87 | |
AhmadAlkaff | 0:7b5d37ca532f | 88 | // Botttom Temperature Sensor |
AhmadAlkaff | 2:17d5a74fc2c4 | 89 | MAX30205 MAX30205_bottom(&i2c1, MAX30205_I2C_SLAVE_ADDR_BOTTOM); |
AhmadAlkaff | 0:7b5d37ca532f | 90 | |
AhmadAlkaff | 0:7b5d37ca532f | 91 | // ECG device |
AhmadAlkaff | 0:7b5d37ca532f | 92 | MAX30001 max30001(&spi); |
AhmadAlkaff | 0:7b5d37ca532f | 93 | InterruptIn max30001_InterruptB(P3_6); |
AhmadAlkaff | 0:7b5d37ca532f | 94 | InterruptIn max30001_Interrupt2B(P4_5); |
AhmadAlkaff | 0:7b5d37ca532f | 95 | |
AhmadAlkaff | 0:7b5d37ca532f | 96 | // PWM used as fclk for the MAX30001 |
AhmadAlkaff | 0:7b5d37ca532f | 97 | PwmOut pwmout(P1_7); |
AhmadAlkaff | 0:7b5d37ca532f | 98 | |
AhmadAlkaff | 0:7b5d37ca532f | 99 | DigitalOut led(LED1); |
AhmadAlkaff | 0:7b5d37ca532f | 100 | |
AhmadAlkaff | 0:7b5d37ca532f | 101 | // Data of sensors |
AhmadAlkaff | 0:7b5d37ca532f | 102 | int32_t ECG_Raw, ECG_cumul, SpO_Raw; |
AhmadAlkaff | 0:7b5d37ca532f | 103 | double ECG_converted = 0; |
AhmadAlkaff | 0:7b5d37ca532f | 104 | uint32_t index = 0; |
AhmadAlkaff | 0:7b5d37ca532f | 105 | |
AhmadAlkaff | 0:7b5d37ca532f | 106 | //Temperature sensor variables |
AhmadAlkaff | 2:17d5a74fc2c4 | 107 | uint16_t rawTemp_top, rawTemp_bottom; |
AhmadAlkaff | 2:17d5a74fc2c4 | 108 | float celsius_top, celsius_bottom, fahrenheit_top, fahrenheit_bottom; |
AhmadAlkaff | 0:7b5d37ca532f | 109 | |
AhmadAlkaff | 0:7b5d37ca532f | 110 | // Barometric sensor variables |
AhmadAlkaff | 2:17d5a74fc2c4 | 111 | char bmp280_rawData = 0; |
AhmadAlkaff | 2:17d5a74fc2c4 | 112 | float Temp_degC, Press_Pa, Press_Bar; |
AhmadAlkaff | 2:17d5a74fc2c4 | 113 | |
AhmadAlkaff | 2:17d5a74fc2c4 | 114 | // Accelerometer sensor variables |
AhmadAlkaff | 2:17d5a74fc2c4 | 115 | int16_t accel_value[3]; |
AhmadAlkaff | 0:7b5d37ca532f | 116 | |
AhmadAlkaff | 0:7b5d37ca532f | 117 | //write the power down command to PMIC |
AhmadAlkaff | 0:7b5d37ca532f | 118 | void turnOff() { |
AhmadAlkaff | 0:7b5d37ca532f | 119 | max14720.shutdown(); |
AhmadAlkaff | 0:7b5d37ca532f | 120 | } |
AhmadAlkaff | 0:7b5d37ca532f | 121 | |
AhmadAlkaff | 0:7b5d37ca532f | 122 | //@brief Creates a packet that will be streamed via USB Serial |
AhmadAlkaff | 0:7b5d37ca532f | 123 | //@brief the packet created will be inserted into a fifo to be streamed at a later time |
AhmadAlkaff | 0:7b5d37ca532f | 124 | //@param id Streaming ID |
AhmadAlkaff | 0:7b5d37ca532f | 125 | //@param buffer Pointer to a uint32 array that contains the data to include in the packet |
AhmadAlkaff | 0:7b5d37ca532f | 126 | //@param number Number of elements in the buffer |
AhmadAlkaff | 0:7b5d37ca532f | 127 | void StreamPacketUint32_ex(uint32_t id, uint32_t *buffer, uint32_t number) { |
AhmadAlkaff | 0:7b5d37ca532f | 128 | int k; |
AhmadAlkaff | 0:7b5d37ca532f | 129 | |
AhmadAlkaff | 0:7b5d37ca532f | 130 | if(id == MAX30001_DATA_ECG) { |
AhmadAlkaff | 0:7b5d37ca532f | 131 | for (k = 0; k < number ; k++) { |
AhmadAlkaff | 0:7b5d37ca532f | 132 | ECG_Raw = (int32_t)(buffer[k] << 8); |
AhmadAlkaff | 0:7b5d37ca532f | 133 | ECG_Raw = ECG_Raw >> 14; |
AhmadAlkaff | 0:7b5d37ca532f | 134 | usbSerial.printf("ECG Raw: %d;%d\r\n", index, ECG_Raw); |
socrj | 3:a7396ed925e6 | 135 | usbSerial.printf("k is %d and number is %d\r\n", k, number); |
AhmadAlkaff | 0:7b5d37ca532f | 136 | index++; |
AhmadAlkaff | 0:7b5d37ca532f | 137 | } |
AhmadAlkaff | 0:7b5d37ca532f | 138 | } |
AhmadAlkaff | 0:7b5d37ca532f | 139 | |
AhmadAlkaff | 0:7b5d37ca532f | 140 | //if(id == MAX30101_OXIMETER_DATA + 2) { |
AhmadAlkaff | 0:7b5d37ca532f | 141 | // for (k = 0; k < number; k++) |
AhmadAlkaff | 0:7b5d37ca532f | 142 | // SpO_Raw = (int32_t)(buffer[k]); |
AhmadAlkaff | 0:7b5d37ca532f | 143 | // usbSerial.printf("SpO Raw: %d\r\n", SpO_Raw); |
AhmadAlkaff | 0:7b5d37ca532f | 144 | //} |
AhmadAlkaff | 0:7b5d37ca532f | 145 | } |
AhmadAlkaff | 0:7b5d37ca532f | 146 | |
AhmadAlkaff | 0:7b5d37ca532f | 147 | //void MAX30101_OnInterrupt(void){ |
AhmadAlkaff | 0:7b5d37ca532f | 148 | // I2CM_Init_Reset(2, 1); |
AhmadAlkaff | 0:7b5d37ca532f | 149 | //} |
AhmadAlkaff | 0:7b5d37ca532f | 150 | |
AhmadAlkaff | 0:7b5d37ca532f | 151 | int main() { |
AhmadAlkaff | 0:7b5d37ca532f | 152 | // hold results for returning functions |
AhmadAlkaff | 0:7b5d37ca532f | 153 | int result; |
AhmadAlkaff | 0:7b5d37ca532f | 154 | |
AhmadAlkaff | 0:7b5d37ca532f | 155 | // initialize HVOUT on the MAX14720 PMIC |
AhmadAlkaff | 0:7b5d37ca532f | 156 | result = max14720.init(); |
AhmadAlkaff | 0:7b5d37ca532f | 157 | if (result == MAX14720_ERROR) |
AhmadAlkaff | 0:7b5d37ca532f | 158 | printf("Error initializing MAX14720"); |
AhmadAlkaff | 0:7b5d37ca532f | 159 | max14720.boostEn = MAX14720::BOOST_ENABLED; |
AhmadAlkaff | 0:7b5d37ca532f | 160 | max14720.boostSetVoltage(HVOUT_VOLTAGE); |
AhmadAlkaff | 0:7b5d37ca532f | 161 | |
AhmadAlkaff | 0:7b5d37ca532f | 162 | // This is the SpO2 mode (IR&Red LED) |
AhmadAlkaff | 0:7b5d37ca532f | 163 | //max30101.SpO2mode_init(FIFO_WATERLEVEL_MARK, SAMPLE_AVG, SAMPLE_RATE, PULSE_WIDTH, RED_LED_CURRENT, IR_LED_CURRENT); |
AhmadAlkaff | 0:7b5d37ca532f | 164 | |
AhmadAlkaff | 0:7b5d37ca532f | 165 | // MAX30101 initialize interrupt |
AhmadAlkaff | 0:7b5d37ca532f | 166 | //max30101.onInterrupt(&MAX30101_OnInterrupt); |
AhmadAlkaff | 0:7b5d37ca532f | 167 | //max30101.onDataAvailable(&StreamPacketUint32_ex); |
AhmadAlkaff | 0:7b5d37ca532f | 168 | //max30101_Interrupt.fall(&MAX30101MidIntHandler); |
AhmadAlkaff | 2:17d5a74fc2c4 | 169 | |
AhmadAlkaff | 2:17d5a74fc2c4 | 170 | // LIS2DH initialize interrupt |
AhmadAlkaff | 2:17d5a74fc2c4 | 171 | //lis2dh.onInterrupt(&MAX30101_OnInterrupt); |
AhmadAlkaff | 2:17d5a74fc2c4 | 172 | //lis2dh.onDataAvailable(&StreamPacketUint32_ex); |
AhmadAlkaff | 2:17d5a74fc2c4 | 173 | //lis2dh_Interrupt.fall(&MAX30101MidIntHandler); |
AhmadAlkaff | 2:17d5a74fc2c4 | 174 | |
AhmadAlkaff | 0:7b5d37ca532f | 175 | // Initialise the BMP280 |
AhmadAlkaff | 0:7b5d37ca532f | 176 | //bmp280_pres.init(BMP280::OVERSAMPLING_X16_P, BMP280::OVERSAMPLING_X2_T, BMP280::FILT_4, BMP280::NORMAL_MODE, BMP280::T_62_5); |
AhmadAlkaff | 0:7b5d37ca532f | 177 | |
AhmadAlkaff | 2:17d5a74fc2c4 | 178 | // LIS2DH initialize interrupt |
socrj | 3:a7396ed925e6 | 179 | lis2dh.initStart(LIS2DH_DATARATE_50HZ, LIS2DH_FIFO_SIZE); |
socrj | 3:a7396ed925e6 | 180 | //lis2dh.init(); |
socrj | 3:a7396ed925e6 | 181 | //lis2dh_Interrupt.fall(&LIS2DHIntHandler); |
socrj | 3:a7396ed925e6 | 182 | //lis2dh_Interrupt.mode(PullUp); |
AhmadAlkaff | 2:17d5a74fc2c4 | 183 | |
AhmadAlkaff | 0:7b5d37ca532f | 184 | // Interrupt priority |
AhmadAlkaff | 0:7b5d37ca532f | 185 | NVIC_SetPriority(GPIO_P0_IRQn, 5); |
AhmadAlkaff | 0:7b5d37ca532f | 186 | NVIC_SetPriority(GPIO_P1_IRQn, 5); |
AhmadAlkaff | 0:7b5d37ca532f | 187 | NVIC_SetPriority(GPIO_P2_IRQn, 5); |
AhmadAlkaff | 0:7b5d37ca532f | 188 | NVIC_SetPriority(GPIO_P3_IRQn, 5); |
AhmadAlkaff | 0:7b5d37ca532f | 189 | NVIC_SetPriority(GPIO_P4_IRQn, 5); |
AhmadAlkaff | 0:7b5d37ca532f | 190 | NVIC_SetPriority(GPIO_P5_IRQn, 5); |
AhmadAlkaff | 0:7b5d37ca532f | 191 | NVIC_SetPriority(GPIO_P6_IRQn, 5); |
AhmadAlkaff | 0:7b5d37ca532f | 192 | // Used by the MAX30001 |
AhmadAlkaff | 0:7b5d37ca532f | 193 | NVIC_SetPriority(SPI1_IRQn, 0); |
AhmadAlkaff | 0:7b5d37ca532f | 194 | |
AhmadAlkaff | 0:7b5d37ca532f | 195 | /* ECG Initialize */ |
AhmadAlkaff | 0:7b5d37ca532f | 196 | max30001_InterruptB.disable_irq(); |
AhmadAlkaff | 0:7b5d37ca532f | 197 | max30001_Interrupt2B.disable_irq(); |
AhmadAlkaff | 0:7b5d37ca532f | 198 | max30001_InterruptB.mode(PullUp); |
AhmadAlkaff | 0:7b5d37ca532f | 199 | max30001_InterruptB.fall(&MAX30001Mid_IntB_Handler); |
AhmadAlkaff | 0:7b5d37ca532f | 200 | max30001_Interrupt2B.mode(PullUp); |
AhmadAlkaff | 0:7b5d37ca532f | 201 | max30001_Interrupt2B.fall(&MAX30001Mid_Int2B_Handler); |
AhmadAlkaff | 0:7b5d37ca532f | 202 | max30001_InterruptB.enable_irq(); |
AhmadAlkaff | 0:7b5d37ca532f | 203 | max30001_Interrupt2B.enable_irq(); |
AhmadAlkaff | 0:7b5d37ca532f | 204 | MAX30001_AllowInterrupts(1); |
AhmadAlkaff | 0:7b5d37ca532f | 205 | // Configuring the FCLK for the ECG, set to 32.768KHZ |
AhmadAlkaff | 0:7b5d37ca532f | 206 | pwmout.period_us(31); |
AhmadAlkaff | 0:7b5d37ca532f | 207 | pwmout.write(0.5); // 0-1 is 0-100%, 0.5 = 50% duty cycle. |
AhmadAlkaff | 0:7b5d37ca532f | 208 | max30001.max30001_sw_rst(); // Do a software reset of the MAX30001 |
AhmadAlkaff | 0:7b5d37ca532f | 209 | max30001.max30001_INT_assignment( |
AhmadAlkaff | 0:7b5d37ca532f | 210 | MAX30001::MAX30001_INT_B, // en_enint_loc |
AhmadAlkaff | 0:7b5d37ca532f | 211 | MAX30001::MAX30001_NO_INT, // en_eovf_loc |
AhmadAlkaff | 0:7b5d37ca532f | 212 | MAX30001::MAX30001_NO_INT, // en_fstint_loc |
AhmadAlkaff | 0:7b5d37ca532f | 213 | |
AhmadAlkaff | 0:7b5d37ca532f | 214 | MAX30001::MAX30001_INT_2B, // en_dcloffint_loc |
AhmadAlkaff | 0:7b5d37ca532f | 215 | MAX30001::MAX30001_INT_B, // en_bint_loc |
AhmadAlkaff | 0:7b5d37ca532f | 216 | MAX30001::MAX30001_NO_INT, // en_bovf_loc |
AhmadAlkaff | 0:7b5d37ca532f | 217 | |
AhmadAlkaff | 0:7b5d37ca532f | 218 | MAX30001::MAX30001_INT_2B, // en_bover_loc |
AhmadAlkaff | 0:7b5d37ca532f | 219 | MAX30001::MAX30001_INT_2B, // en_bundr_loc |
AhmadAlkaff | 0:7b5d37ca532f | 220 | MAX30001::MAX30001_NO_INT, // en_bcgmon_loc |
AhmadAlkaff | 0:7b5d37ca532f | 221 | |
AhmadAlkaff | 0:7b5d37ca532f | 222 | MAX30001::MAX30001_INT_B, // en_pint_loc |
AhmadAlkaff | 0:7b5d37ca532f | 223 | MAX30001::MAX30001_NO_INT, // en_povf_loc, |
AhmadAlkaff | 0:7b5d37ca532f | 224 | MAX30001::MAX30001_NO_INT, // en_pedge_loc |
AhmadAlkaff | 0:7b5d37ca532f | 225 | |
AhmadAlkaff | 0:7b5d37ca532f | 226 | MAX30001::MAX30001_INT_2B, // en_lonint_loc |
AhmadAlkaff | 0:7b5d37ca532f | 227 | MAX30001::MAX30001_INT_B, // en_rrint_loc |
AhmadAlkaff | 0:7b5d37ca532f | 228 | MAX30001::MAX30001_NO_INT, // en_samp_loc |
AhmadAlkaff | 0:7b5d37ca532f | 229 | |
AhmadAlkaff | 0:7b5d37ca532f | 230 | MAX30001::MAX30001_INT_ODNR, // intb_Type |
AhmadAlkaff | 0:7b5d37ca532f | 231 | MAX30001::MAX30001_INT_ODNR); // int2b_Type |
AhmadAlkaff | 0:7b5d37ca532f | 232 | |
AhmadAlkaff | 0:7b5d37ca532f | 233 | // MAX30001 initialize interrupt |
socrj | 3:a7396ed925e6 | 234 | /* |
AhmadAlkaff | 0:7b5d37ca532f | 235 | max30001.max30001_ECG_InitStart(En_ecg, Openp, Openn, Pol, Calp_sel, Caln_sel, E_fit, Rate, Gain, Dhpf, Dlpf); |
AhmadAlkaff | 0:7b5d37ca532f | 236 | max30001.max30001_synch(); |
AhmadAlkaff | 0:7b5d37ca532f | 237 | max30001.onDataAvailable(&StreamPacketUint32_ex); |
socrj | 3:a7396ed925e6 | 238 | */ |
AhmadAlkaff | 0:7b5d37ca532f | 239 | int a; |
socrj | 3:a7396ed925e6 | 240 | |
AhmadAlkaff | 0:7b5d37ca532f | 241 | while (1) { |
socrj | 3:a7396ed925e6 | 242 | /* |
socrj | 3:a7396ed925e6 | 243 | wait(5); |
socrj | 3:a7396ed925e6 | 244 | a = usbSerial._getc(); |
socrj | 3:a7396ed925e6 | 245 | usbSerial.printf("WAIT 5 LIAO\n\n\n\r"); |
socrj | 3:a7396ed925e6 | 246 | |
socrj | 3:a7396ed925e6 | 247 | if (a == 98) { |
AhmadAlkaff | 0:7b5d37ca532f | 248 | max30001.max30001_Stop_ECG(); |
AhmadAlkaff | 0:7b5d37ca532f | 249 | index = 0; |
AhmadAlkaff | 0:7b5d37ca532f | 250 | } |
socrj | 3:a7396ed925e6 | 251 | // if (a == 97) |
AhmadAlkaff | 0:7b5d37ca532f | 252 | // Read ECG |
socrj | 3:a7396ed925e6 | 253 | if (a == 97) |
socrj | 3:a7396ed925e6 | 254 | { |
socrj | 3:a7396ed925e6 | 255 | usbSerial.printf("-------------------------------------------------\n\n\n\r"); |
socrj | 3:a7396ed925e6 | 256 | max30001.max30001_ECG_InitStart(En_ecg, Openp, Openn, Pol, Calp_sel, Caln_sel, E_fit, Rate, Gain, Dhpf, Dlpf); |
socrj | 3:a7396ed925e6 | 257 | max30001.max30001_synch(); |
socrj | 3:a7396ed925e6 | 258 | max30001.onDataAvailable(&StreamPacketUint32_ex); |
socrj | 3:a7396ed925e6 | 259 | usbSerial.printf("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n\n\r"); |
socrj | 3:a7396ed925e6 | 260 | } |
socrj | 3:a7396ed925e6 | 261 | */ |
socrj | 3:a7396ed925e6 | 262 | lis2dh.int_handler(); |
AhmadAlkaff | 0:7b5d37ca532f | 263 | |
socrj | 3:a7396ed925e6 | 264 | lis2dh.get_motion_fifo(&accel_value[0], &accel_value[1], &accel_value[2]); |
AhmadAlkaff | 2:17d5a74fc2c4 | 265 | |
AhmadAlkaff | 2:17d5a74fc2c4 | 266 | usbSerial.printf("***** LIS2DH Acclerometer Sensor Reading *****\n\r"); |
socrj | 3:a7396ed925e6 | 267 | usbSerial.printf("X-Axis: %d\n\rY-Axis: %d\n\rZ-Axis: %d", accel_value[0], accel_value[1], accel_value[2]); |
AhmadAlkaff | 0:7b5d37ca532f | 268 | usbSerial.printf("-------------------------------------------------\n\n\n\r"); |
socrj | 3:a7396ed925e6 | 269 | wait(1); |
AhmadAlkaff | 0:7b5d37ca532f | 270 | } |
AhmadAlkaff | 0:7b5d37ca532f | 271 | } |