Central Applications - Mbed Code repo / Mbed OS MAX30205_Demo

Dependencies:   MAX30205 max32630fthr

Fork of MAX30205_Demo by Corey Harris

Committer:
coreyharris
Date:
Thu Aug 17 20:10:51 2017 +0000
Revision:
2:cf07a3eb2f30
Parent:
1:1cab60b84d7f
Child:
3:4a8ab8ffd52d
Added comments;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
coreyharris 0:6e28e543a11c 1 #include "mbed.h"
coreyharris 0:6e28e543a11c 2 #include "max32630fthr.h"
coreyharris 0:6e28e543a11c 3 #include "MAX30205.h"
coreyharris 0:6e28e543a11c 4
coreyharris 0:6e28e543a11c 5 MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
coreyharris 0:6e28e543a11c 6
coreyharris 0:6e28e543a11c 7 bool temp_sensor_config(MAX30205 &temp_sensor);
coreyharris 0:6e28e543a11c 8
coreyharris 0:6e28e543a11c 9 int main()
coreyharris 0:6e28e543a11c 10 {
coreyharris 0:6e28e543a11c 11
coreyharris 0:6e28e543a11c 12 Serial pc(USBTX, USBRX);
coreyharris 0:6e28e543a11c 13 pc.baud(115200);
coreyharris 0:6e28e543a11c 14
coreyharris 0:6e28e543a11c 15 DigitalOut rLed(LED1, LED_OFF);
coreyharris 0:6e28e543a11c 16 DigitalOut gLed(LED2, LED_OFF);
coreyharris 0:6e28e543a11c 17 DigitalOut bLed(LED3, LED_OFF);
coreyharris 0:6e28e543a11c 18
coreyharris 0:6e28e543a11c 19 I2C i2cBus(I2C1_SDA, I2C1_SCL);
coreyharris 0:6e28e543a11c 20
coreyharris 0:6e28e543a11c 21 MAX30205 * temp_sensor;
coreyharris 0:6e28e543a11c 22 temp_sensor = new MAX30205(i2cBus, 0x48);
coreyharris 0:6e28e543a11c 23 int rc = temp_sensor_config(*temp_sensor);
coreyharris 0:6e28e543a11c 24
coreyharris 0:6e28e543a11c 25 Timer temp_sensor_sampleTimer;
coreyharris 0:6e28e543a11c 26 temp_sensor_sampleTimer.start();
coreyharris 0:6e28e543a11c 27
coreyharris 0:6e28e543a11c 28 MAX30205::Configuration_u temp_cfg;
coreyharris 0:6e28e543a11c 29 uint16_t rawTemperatureRead, temp_conversion_flag;
coreyharris 0:6e28e543a11c 30 float temperature;
coreyharris 0:6e28e543a11c 31
coreyharris 0:6e28e543a11c 32 while(1) {
coreyharris 0:6e28e543a11c 33
coreyharris 0:6e28e543a11c 34 if( rc == 0 ) {
coreyharris 0:6e28e543a11c 35
coreyharris 0:6e28e543a11c 36 /* Start a new temperature conversion */
coreyharris 0:6e28e543a11c 37 if ( temp_sensor_sampleTimer.read() > 1.0 && !temp_conversion_flag){
coreyharris 0:6e28e543a11c 38
coreyharris 0:6e28e543a11c 39 temp_cfg.bits.one_shot = 1;
coreyharris 2:cf07a3eb2f30 40 rc = temp_sensor->writeConfiguration(temp_cfg); // Send one-shot cmd to begin conversion
coreyharris 2:cf07a3eb2f30 41 temp_conversion_flag = 1; // Raise flag indicating a conversion has begun
coreyharris 0:6e28e543a11c 42
coreyharris 0:6e28e543a11c 43 }
coreyharris 0:6e28e543a11c 44
coreyharris 0:6e28e543a11c 45 /* Read the completed temperature conversion */
coreyharris 0:6e28e543a11c 46 if ( temp_sensor_sampleTimer.read() > 1.05 && temp_conversion_flag ){
coreyharris 0:6e28e543a11c 47
coreyharris 2:cf07a3eb2f30 48 temp_conversion_flag = 0; // Lower flag when conversion has completed
coreyharris 2:cf07a3eb2f30 49 rc = temp_sensor->readTemperature(rawTemperatureRead); // Read the temperature data
coreyharris 2:cf07a3eb2f30 50 temperature = temp_sensor->toCelsius(rawTemperatureRead); // Convert temp data to Celsius
coreyharris 2:cf07a3eb2f30 51 temp_sensor_sampleTimer.reset(); // Reset timer
coreyharris 0:6e28e543a11c 52
coreyharris 0:6e28e543a11c 53 pc.printf("Temperature is %2.3f deg. C \r\n", temperature);
coreyharris 0:6e28e543a11c 54
coreyharris 0:6e28e543a11c 55 }
coreyharris 0:6e28e543a11c 56
coreyharris 0:6e28e543a11c 57 }else{
coreyharris 0:6e28e543a11c 58 pc.printf("Something went wrong, check the I2C bus or power connections... \r\n");
coreyharris 0:6e28e543a11c 59 bLed = LED_OFF;
coreyharris 0:6e28e543a11c 60 gLed = LED_OFF;
coreyharris 0:6e28e543a11c 61 while(1){
coreyharris 0:6e28e543a11c 62 rLed = !rLed;
coreyharris 0:6e28e543a11c 63 wait(0.5);
coreyharris 0:6e28e543a11c 64 }
coreyharris 0:6e28e543a11c 65 }
coreyharris 0:6e28e543a11c 66 }
coreyharris 0:6e28e543a11c 67 }
coreyharris 0:6e28e543a11c 68
coreyharris 0:6e28e543a11c 69
coreyharris 0:6e28e543a11c 70 bool temp_sensor_config(MAX30205 &temp_sensor){
coreyharris 0:6e28e543a11c 71
coreyharris 0:6e28e543a11c 72 int rc = 0;
coreyharris 0:6e28e543a11c 73
coreyharris 0:6e28e543a11c 74 MAX30205::Configuration_u temp_cfg;
coreyharris 0:6e28e543a11c 75 if(rc == 0)
coreyharris 0:6e28e543a11c 76 {
coreyharris 0:6e28e543a11c 77 temp_cfg.all = 0;
coreyharris 0:6e28e543a11c 78 temp_cfg.bits.shutdown = 1;
coreyharris 0:6e28e543a11c 79 temp_cfg.bits.comp_int = 1;
coreyharris 0:6e28e543a11c 80 temp_cfg.bits.os_polarity = 0;
coreyharris 0:6e28e543a11c 81 temp_cfg.bits.fault_queue = 1;
coreyharris 0:6e28e543a11c 82 temp_cfg.bits.data_format = 0;
coreyharris 0:6e28e543a11c 83 temp_cfg.bits.timeout = 0;
coreyharris 0:6e28e543a11c 84 temp_cfg.bits.one_shot = 0;
coreyharris 0:6e28e543a11c 85
coreyharris 0:6e28e543a11c 86 rc = temp_sensor.writeConfiguration(temp_cfg);
coreyharris 0:6e28e543a11c 87
coreyharris 0:6e28e543a11c 88 }
coreyharris 0:6e28e543a11c 89
coreyharris 0:6e28e543a11c 90 return rc;
coreyharris 0:6e28e543a11c 91 }