MAX30205EVSYS demo program designed for implementation with the MAX32630FTHR. The MAX30205 can be integrated to the MAX32630FTHR by fly-wires or integration of the MAX30101WING. The program output temperature data every second to a serial terminal.

Dependencies:   MAX30205 max32630fthr

Fork of MAX30205_Demo by John Greene

Committer:
coreyharris
Date:
Wed Aug 16 22:58:45 2017 +0000
Revision:
0:6e28e543a11c
Child:
1:1cab60b84d7f
Stable app. demo for MAX30205

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
coreyharris 0:6e28e543a11c 10 // main() runs in its own thread in the OS
coreyharris 0:6e28e543a11c 11 // (note the calls to Thread::wait below for delays)
coreyharris 0:6e28e543a11c 12 int main()
coreyharris 0:6e28e543a11c 13 {
coreyharris 0:6e28e543a11c 14
coreyharris 0:6e28e543a11c 15 Serial pc(USBTX, USBRX);
coreyharris 0:6e28e543a11c 16 pc.baud(115200);
coreyharris 0:6e28e543a11c 17
coreyharris 0:6e28e543a11c 18 DigitalOut rLed(LED1, LED_OFF);
coreyharris 0:6e28e543a11c 19 DigitalOut gLed(LED2, LED_OFF);
coreyharris 0:6e28e543a11c 20 DigitalOut bLed(LED3, LED_OFF);
coreyharris 0:6e28e543a11c 21
coreyharris 0:6e28e543a11c 22 I2C i2cBus(I2C1_SDA, I2C1_SCL);
coreyharris 0:6e28e543a11c 23
coreyharris 0:6e28e543a11c 24 MAX30205 * temp_sensor;
coreyharris 0:6e28e543a11c 25 temp_sensor = new MAX30205(i2cBus, 0x48);
coreyharris 0:6e28e543a11c 26 int rc = temp_sensor_config(*temp_sensor);
coreyharris 0:6e28e543a11c 27
coreyharris 0:6e28e543a11c 28 Timer temp_sensor_sampleTimer;
coreyharris 0:6e28e543a11c 29 temp_sensor_sampleTimer.start();
coreyharris 0:6e28e543a11c 30
coreyharris 0:6e28e543a11c 31 MAX30205::Configuration_u temp_cfg;
coreyharris 0:6e28e543a11c 32 uint16_t rawTemperatureRead, temp_conversion_flag;
coreyharris 0:6e28e543a11c 33 float temperature;
coreyharris 0:6e28e543a11c 34
coreyharris 0:6e28e543a11c 35 while(1) {
coreyharris 0:6e28e543a11c 36
coreyharris 0:6e28e543a11c 37 if( rc == 0 ) {
coreyharris 0:6e28e543a11c 38
coreyharris 0:6e28e543a11c 39 /* Start a new temperature conversion */
coreyharris 0:6e28e543a11c 40 if ( temp_sensor_sampleTimer.read() > 1.0 && !temp_conversion_flag){
coreyharris 0:6e28e543a11c 41
coreyharris 0:6e28e543a11c 42 temp_cfg.bits.one_shot = 1;
coreyharris 0:6e28e543a11c 43 rc = temp_sensor->writeConfiguration(temp_cfg);
coreyharris 0:6e28e543a11c 44 temp_conversion_flag = 1;
coreyharris 0:6e28e543a11c 45
coreyharris 0:6e28e543a11c 46 }
coreyharris 0:6e28e543a11c 47
coreyharris 0:6e28e543a11c 48 /* Read the completed temperature conversion */
coreyharris 0:6e28e543a11c 49 if ( temp_sensor_sampleTimer.read() > 1.05 && temp_conversion_flag ){
coreyharris 0:6e28e543a11c 50
coreyharris 0:6e28e543a11c 51 temp_conversion_flag = 0;
coreyharris 0:6e28e543a11c 52 rc = temp_sensor->readTemperature(rawTemperatureRead);
coreyharris 0:6e28e543a11c 53 temperature = temp_sensor->toCelsius(rawTemperatureRead);
coreyharris 0:6e28e543a11c 54 temp_sensor_sampleTimer.reset();
coreyharris 0:6e28e543a11c 55
coreyharris 0:6e28e543a11c 56 pc.printf("Temperature is %2.3f deg. C \r\n", temperature);
coreyharris 0:6e28e543a11c 57
coreyharris 0:6e28e543a11c 58 }
coreyharris 0:6e28e543a11c 59
coreyharris 0:6e28e543a11c 60 }else{
coreyharris 0:6e28e543a11c 61 pc.printf("Something went wrong, check the I2C bus or power connections... \r\n");
coreyharris 0:6e28e543a11c 62 bLed = LED_OFF;
coreyharris 0:6e28e543a11c 63 gLed = LED_OFF;
coreyharris 0:6e28e543a11c 64 while(1){
coreyharris 0:6e28e543a11c 65 rLed = !rLed;
coreyharris 0:6e28e543a11c 66 wait(0.5);
coreyharris 0:6e28e543a11c 67 }
coreyharris 0:6e28e543a11c 68 }
coreyharris 0:6e28e543a11c 69 }
coreyharris 0:6e28e543a11c 70 }
coreyharris 0:6e28e543a11c 71
coreyharris 0:6e28e543a11c 72
coreyharris 0:6e28e543a11c 73 bool temp_sensor_config(MAX30205 &temp_sensor){
coreyharris 0:6e28e543a11c 74
coreyharris 0:6e28e543a11c 75 int rc = 0;
coreyharris 0:6e28e543a11c 76
coreyharris 0:6e28e543a11c 77 MAX30205::Configuration_u temp_cfg;
coreyharris 0:6e28e543a11c 78 if(rc == 0)
coreyharris 0:6e28e543a11c 79 {
coreyharris 0:6e28e543a11c 80 temp_cfg.all = 0;
coreyharris 0:6e28e543a11c 81 temp_cfg.bits.shutdown = 1;
coreyharris 0:6e28e543a11c 82 temp_cfg.bits.comp_int = 1;
coreyharris 0:6e28e543a11c 83 temp_cfg.bits.os_polarity = 0;
coreyharris 0:6e28e543a11c 84 temp_cfg.bits.fault_queue = 1;
coreyharris 0:6e28e543a11c 85 temp_cfg.bits.data_format = 0;
coreyharris 0:6e28e543a11c 86 temp_cfg.bits.timeout = 0;
coreyharris 0:6e28e543a11c 87 temp_cfg.bits.one_shot = 0;
coreyharris 0:6e28e543a11c 88
coreyharris 0:6e28e543a11c 89 rc = temp_sensor.writeConfiguration(temp_cfg);
coreyharris 0:6e28e543a11c 90
coreyharris 0:6e28e543a11c 91 }
coreyharris 0:6e28e543a11c 92
coreyharris 0:6e28e543a11c 93 return rc;
coreyharris 0:6e28e543a11c 94 }