Chanel Richardson / Mbed OS vitalsplus-max86150_chanel

Dependencies:   max32630fthr USBDevice

Committer:
saleiferis
Date:
Mon Mar 02 04:42:12 2020 +0000
Revision:
8:2005014df05c
Parent:
7:4debec043316
Child:
9:171171516ebd
interrupt

Who changed what in which revision?

UserRevisionLine numberNew contents of line
saleiferis 0:89ec48e52250 1 #include "mbed.h"
saleiferis 0:89ec48e52250 2 #include "math.h"
saleiferis 0:89ec48e52250 3 #include "max32630fthr.h"
saleiferis 0:89ec48e52250 4 #include "max86150.h"
saleiferis 0:89ec48e52250 5 #include "I2C.h"
saleiferis 0:89ec48e52250 6 #include "ble/BLE.h"
saleiferis 0:89ec48e52250 7 #include "ble/Gap.h"
saleiferis 7:4debec043316 8 //#include "ble/services/HeartRateService.h"
saleiferis 7:4debec043316 9 #include "ECGService.h"
saleiferis 1:6e6f7e3cc1e1 10 #include <events/mbed_events.h>
saleiferis 1:6e6f7e3cc1e1 11 #include "bt32630.h"
saleiferis 0:89ec48e52250 12
saleiferis 0:89ec48e52250 13 //Register definitions
saleiferis 0:89ec48e52250 14 #define MAX86150_Addr 0xBC //updated per I2Cscanner, 8 bit version of 7 bit code 0x5E
saleiferis 0:89ec48e52250 15 #define InterruptStatusReg1 0x00 //Interrupt status byte 0 (read both bytes 0x00 and 0x01 when checking int status)
saleiferis 0:89ec48e52250 16 #define InterruptStatusReg2 0x01
saleiferis 0:89ec48e52250 17 #define InterruptEnableReg1 0x02 //Interrupt enable byte 0
saleiferis 0:89ec48e52250 18 #define InterruptEnableReg2 0x03
saleiferis 0:89ec48e52250 19 #define FIFOWritePointerReg 0x04
saleiferis 0:89ec48e52250 20 #define OverflowCounterReg 0x05
saleiferis 0:89ec48e52250 21 #define FIFOReadPointerReg 0x06
saleiferis 0:89ec48e52250 22 #define FIFODataReg 0x07
saleiferis 0:89ec48e52250 23 #define FIFOConfigReg 0x08
saleiferis 0:89ec48e52250 24 #define FIFODataControlReg1 0x09
saleiferis 0:89ec48e52250 25 #define FIFODataControlReg2 0x0A
saleiferis 0:89ec48e52250 26 #define SystemControlReg 0x0D
saleiferis 0:89ec48e52250 27 #define ppgConfigReg0 0x0E
saleiferis 0:89ec48e52250 28 #define ppgConfigReg1 0x0F
saleiferis 0:89ec48e52250 29 #define ProxIntThreshReg 0x10
saleiferis 0:89ec48e52250 30 #define LED1PulseAmpReg 0x11
saleiferis 0:89ec48e52250 31 #define LED2PulseAmpReg 0x12
saleiferis 0:89ec48e52250 32 #define LEDRangeReg 0x14
saleiferis 0:89ec48e52250 33 #define LEDPilotPAReg 0x15
saleiferis 0:89ec48e52250 34 #define EcgConfigReg1 0x3C
saleiferis 0:89ec48e52250 35 #define EcgConfigReg2 0x3D
saleiferis 0:89ec48e52250 36 #define EcgConfigReg3 0x3E
saleiferis 0:89ec48e52250 37 #define EcgConfigReg4 0x3F
saleiferis 0:89ec48e52250 38 #define PartIDReg 0xFF
saleiferis 0:89ec48e52250 39 #define maxi2cFreq 1000000
saleiferis 0:89ec48e52250 40 #define recommendedi2cFreq 400000
saleiferis 0:89ec48e52250 41 #define interrupt_pin P5_0 //INTB pin --see InterruptIn declaration
saleiferis 0:89ec48e52250 42 #define maxECGrate 0
saleiferis 0:89ec48e52250 43 #define normECGrate 1
saleiferis 0:89ec48e52250 44 //#define BaudRate 921600
saleiferis 0:89ec48e52250 45 //#define BaudRate 256000
saleiferis 0:89ec48e52250 46 //#define BaudRate 250000
saleiferis 0:89ec48e52250 47 #define BaudRate 9600
saleiferis 0:89ec48e52250 48 //#define BaudRate 115200
saleiferis 0:89ec48e52250 49 //#define BaudRate 57600
saleiferis 0:89ec48e52250 50 //also try 921600, 460800 230400
saleiferis 0:89ec48e52250 51 const int16_t i2cBufferSize=32; //32 was stable. In this rev exploring 36
saleiferis 8:2005014df05c 52 void ISR_AFULL();
saleiferis 0:89ec48e52250 53
saleiferis 0:89ec48e52250 54
saleiferis 0:89ec48e52250 55 //I2C i2c(I2C_SDA,I2C_SCL);
saleiferis 0:89ec48e52250 56
saleiferis 0:89ec48e52250 57
saleiferis 0:89ec48e52250 58 Serial pc(USBTX,USBRX,NULL,BaudRate); //open serial port (optionally add device name and baud rate after specifying TX and RX pins)
saleiferis 8:2005014df05c 59 InterruptIn intPin(P5_5);
saleiferis 0:89ec48e52250 60 I2C i2c(I2C2_SDA, I2C2_SCL);
saleiferis 8:2005014df05c 61 MAX86150 max86150Sensor;
saleiferis 0:89ec48e52250 62
saleiferis 8:2005014df05c 63 volatile bool intFlag = false;
saleiferis 1:6e6f7e3cc1e1 64
saleiferis 1:6e6f7e3cc1e1 65 //// Bluetooth Init
saleiferis 1:6e6f7e3cc1e1 66 //BLE& ble = BLE::Instance();
saleiferis 1:6e6f7e3cc1e1 67 static events::EventQueue event_queue(/* event count */ 16 * EVENTS_EVENT_SIZE);
saleiferis 1:6e6f7e3cc1e1 68
saleiferis 8:2005014df05c 69 void ISR_AFULL()
saleiferis 8:2005014df05c 70 {
saleiferis 8:2005014df05c 71 intFlag = true;
saleiferis 8:2005014df05c 72
saleiferis 8:2005014df05c 73 }
saleiferis 0:89ec48e52250 74 //////////
saleiferis 0:89ec48e52250 75 int main(){
saleiferis 0:89ec48e52250 76 //i2c.frequency(recommendedi2cFreq);
saleiferis 4:4233f5538abf 77 //max86150Sensor.softReset();
saleiferis 4:4233f5538abf 78 //wait_ms(3000);
saleiferis 0:89ec48e52250 79 max86150Sensor.begin(i2c, recommendedi2cFreq, MAX86150_Addr);
saleiferis 0:89ec48e52250 80 wait_ms(300);
saleiferis 4:4233f5538abf 81
saleiferis 0:89ec48e52250 82 //unsigned char partID = max86150Sensor.readPartID();
saleiferis 0:89ec48e52250 83 unsigned char partID = max86150Sensor.readRegister8(MAX86150_Addr,0xFF);
saleiferis 0:89ec48e52250 84 pc.printf("Part ID is: %X\n",partID);
saleiferis 1:6e6f7e3cc1e1 85
saleiferis 1:6e6f7e3cc1e1 86
saleiferis 1:6e6f7e3cc1e1 87 //***** SETUP SENSOR
saleiferis 0:89ec48e52250 88 max86150Sensor.setup(); //Configure sensor
saleiferis 1:6e6f7e3cc1e1 89 //max86150Sensor.writeRegister8(MAX86150_Addr,0x0D,0x04); //it as 0x01
saleiferis 4:4233f5538abf 90 wait_ms(300);
saleiferis 4:4233f5538abf 91 pc.printf("SYSCONTOL REG: %x\n", max86150Sensor.readRegister8(MAX86150_Addr,0x0D));
saleiferis 4:4233f5538abf 92 while(max86150Sensor.readRegister8(MAX86150_Addr,0x0D) != 0x04)
saleiferis 4:4233f5538abf 93 {
saleiferis 4:4233f5538abf 94 pc.printf("SYS CTRL not set properly\n");
saleiferis 4:4233f5538abf 95 wait_ms(200);
saleiferis 4:4233f5538abf 96 }
saleiferis 1:6e6f7e3cc1e1 97
saleiferis 1:6e6f7e3cc1e1 98 //*************************************************************\\
saleiferis 1:6e6f7e3cc1e1 99
saleiferis 0:89ec48e52250 100 //wait_ms(2000);
saleiferis 1:6e6f7e3cc1e1 101 //pc.printf("SYS CTRL REG: %x\n",max86150Sensor.readRegister8(MAX86150_Addr,0x0D));
saleiferis 1:6e6f7e3cc1e1 102 //uint8_t readPointer = max86150Sensor.getReadPointer();
saleiferis 1:6e6f7e3cc1e1 103 //uint8_t writePointer = max86150Sensor.getWritePointer();
saleiferis 1:6e6f7e3cc1e1 104 //pc.printf("WRT_PTR: %X ... READ_PTR: %X",writePointer,readPointer);
saleiferis 1:6e6f7e3cc1e1 105 //pc.printf("SYS CTRL REG: %x\n",max86150Sensor.readRegister8(MAX86150_Addr,0x0D));
saleiferis 2:a96a53e6c6a3 106
saleiferis 4:4233f5538abf 107
saleiferis 1:6e6f7e3cc1e1 108 //******* SETUP BLUETOOTH *********
saleiferis 2:a96a53e6c6a3 109
saleiferis 2:a96a53e6c6a3 110
saleiferis 2:a96a53e6c6a3 111 eventQueue.call_every(1, periodicCallback); //it was 500
saleiferis 1:6e6f7e3cc1e1 112 BLE &ble = BLE::Instance();
saleiferis 1:6e6f7e3cc1e1 113 ble.onEventsToProcess(scheduleBleEventsProcessing);
saleiferis 1:6e6f7e3cc1e1 114 ble.init(bleInitComplete);
saleiferis 1:6e6f7e3cc1e1 115 //pc.printf("Before dispatch forever");
saleiferis 8:2005014df05c 116 //eventQueue.dispatch_forever();
saleiferis 4:4233f5538abf 117
saleiferis 8:2005014df05c 118 intPin.fall(&ISR_AFULL);
saleiferis 8:2005014df05c 119
saleiferis 8:2005014df05c 120 max86150Sensor.readRegister8(MAX86150_Addr,0x00);
saleiferis 8:2005014df05c 121 while(1){
saleiferis 8:2005014df05c 122 if (intFlag){
saleiferis 8:2005014df05c 123 pc.printf("intFLagged\n");
saleiferis 8:2005014df05c 124 intFlag = false;
saleiferis 8:2005014df05c 125 max86150Sensor.readRegister8(MAX86150_Addr,0x00);
saleiferis 8:2005014df05c 126 }
saleiferis 8:2005014df05c 127
saleiferis 8:2005014df05c 128 }
saleiferis 1:6e6f7e3cc1e1 129
saleiferis 1:6e6f7e3cc1e1 130 /// Get sensor data
saleiferis 4:4233f5538abf 131 /*
saleiferis 0:89ec48e52250 132 while(1){
saleiferis 0:89ec48e52250 133 if(max86150Sensor.check()>0)
saleiferis 0:89ec48e52250 134 {
saleiferis 4:4233f5538abf 135 pc.printf("%d\n",max86150Sensor.getFIFOECG());
saleiferis 0:89ec48e52250 136 }
saleiferis 1:6e6f7e3cc1e1 137 wait_us(500);
saleiferis 1:6e6f7e3cc1e1 138 }
saleiferis 4:4233f5538abf 139 */
saleiferis 0:89ec48e52250 140
saleiferis 0:89ec48e52250 141
saleiferis 0:89ec48e52250 142
saleiferis 0:89ec48e52250 143 }