Indoor Air Quality Sensor Module

Dependents:   Sensor_iAQ_core Sensor_iAQ_sgp30_bme_si7051 POCBreath_V2_smd_commercial

Committer:
mcm
Date:
Mon Jun 11 12:31:22 2018 +0000
Revision:
3:53c56ce59c29
Parent:
2:cddf1d41f9b0
The driver was completed and tested ( using a NUCLEO-L152RE board ), it works as expected.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 2:cddf1d41f9b0 1 /**
mcm 2:cddf1d41f9b0 2 * @brief iAQ_Core.c
mcm 2:cddf1d41f9b0 3 * @details Indoor air quality module, I2C interface.
mcm 2:cddf1d41f9b0 4 * Functions file.
mcm 2:cddf1d41f9b0 5 *
mcm 2:cddf1d41f9b0 6 *
mcm 2:cddf1d41f9b0 7 * @return N/A
mcm 2:cddf1d41f9b0 8 *
mcm 2:cddf1d41f9b0 9 * @author Manuel Caballero
mcm 2:cddf1d41f9b0 10 * @date 8/June/2018
mcm 2:cddf1d41f9b0 11 * @version 8/June/2018 The ORIGIN
mcm 2:cddf1d41f9b0 12 * @pre N/A.
mcm 2:cddf1d41f9b0 13 * @warning N/A
mcm 2:cddf1d41f9b0 14 * @pre This code belongs to Nimbus Centre ( http://www.nimbus.cit.ie ).
mcm 2:cddf1d41f9b0 15 */
mcm 2:cddf1d41f9b0 16
mcm 2:cddf1d41f9b0 17 #include "iAQ_Core.h"
mcm 2:cddf1d41f9b0 18
mcm 2:cddf1d41f9b0 19
mcm 2:cddf1d41f9b0 20 iAQ_Core::iAQ_Core ( PinName sda, PinName scl, uint32_t addr )
mcm 2:cddf1d41f9b0 21 : _i2c ( sda, scl )
mcm 2:cddf1d41f9b0 22 , _iAQ_Core_Addr ( addr )
mcm 2:cddf1d41f9b0 23 {
mcm 2:cddf1d41f9b0 24 _i2c.frequency( 100000 );
mcm 2:cddf1d41f9b0 25 }
mcm 2:cddf1d41f9b0 26
mcm 2:cddf1d41f9b0 27
mcm 2:cddf1d41f9b0 28 iAQ_Core::~iAQ_Core()
mcm 2:cddf1d41f9b0 29 {
mcm 2:cddf1d41f9b0 30 }
mcm 2:cddf1d41f9b0 31
mcm 2:cddf1d41f9b0 32
mcm 2:cddf1d41f9b0 33
mcm 2:cddf1d41f9b0 34 /**
mcm 3:53c56ce59c29 35 * @brief iAQ_Core_GetNewReading ( iAQ_Core_data_t* )
mcm 2:cddf1d41f9b0 36 *
mcm 2:cddf1d41f9b0 37 * @details It performs a new parameters reading from the sensor.
mcm 2:cddf1d41f9b0 38 *
mcm 2:cddf1d41f9b0 39 * @param[in] N/A
mcm 2:cddf1d41f9b0 40 *
mcm 2:cddf1d41f9b0 41 * @param[out] myData: All parameters: Prediction + Status Flag + Resistance + Tvoc.
mcm 2:cddf1d41f9b0 42 *
mcm 2:cddf1d41f9b0 43 *
mcm 2:cddf1d41f9b0 44 * @return Status of iAQ_Core_GetNewReading.
mcm 2:cddf1d41f9b0 45 *
mcm 2:cddf1d41f9b0 46 *
mcm 2:cddf1d41f9b0 47 * @author Manuel Caballero
mcm 2:cddf1d41f9b0 48 * @date 8/June/2018
mcm 2:cddf1d41f9b0 49 * @version 8/June/2018 The ORIGIN
mcm 2:cddf1d41f9b0 50 * @pre Measurement interval ( continuous ): 1s | Measurement interval ( pulsed ): Max. 11s.
mcm 2:cddf1d41f9b0 51 * @warning First functional reading after start up is 5 minutes.
mcm 2:cddf1d41f9b0 52 */
mcm 3:53c56ce59c29 53 iAQ_Core::iAQ_Core_status_t iAQ_Core::iAQ_Core_GetNewReading ( iAQ_Core_data_t* myData )
mcm 2:cddf1d41f9b0 54 {
mcm 2:cddf1d41f9b0 55 char cmd[9] = { 0 };
mcm 2:cddf1d41f9b0 56 uint32_t aux = 0;
mcm 2:cddf1d41f9b0 57
mcm 2:cddf1d41f9b0 58
mcm 2:cddf1d41f9b0 59 /* Get the data */
mcm 2:cddf1d41f9b0 60 aux = _i2c.read ( _iAQ_Core_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) );
mcm 2:cddf1d41f9b0 61
mcm 2:cddf1d41f9b0 62
mcm 2:cddf1d41f9b0 63 /* Update the parameters */
mcm 2:cddf1d41f9b0 64 myData->pred = ( ( cmd[0] << 8 ) + cmd[1] ); // Prediction = ( byte0 * 2^8 ) + byte1
mcm 2:cddf1d41f9b0 65 myData->status = ( iAQ_Core_status_flag_t )cmd[2];
mcm 2:cddf1d41f9b0 66 myData->resistance = ( ( cmd[4] << 16 ) + ( cmd[5] << 8 ) + cmd[6] ); // Resistance = ( byte4 * 2^16 ) + ( byte5 * 2^8 ) + byte6
mcm 2:cddf1d41f9b0 67 myData->Tvoc = ( ( cmd[7] << 8 ) + cmd[8] ); // Tvoc = ( byte7 * 2^8 ) + byte8
mcm 2:cddf1d41f9b0 68
mcm 2:cddf1d41f9b0 69
mcm 2:cddf1d41f9b0 70
mcm 2:cddf1d41f9b0 71
mcm 2:cddf1d41f9b0 72 if ( aux == I2C_SUCCESS )
mcm 2:cddf1d41f9b0 73 return iAQ_Core_SUCCESS;
mcm 2:cddf1d41f9b0 74 else
mcm 2:cddf1d41f9b0 75 return iAQ_Core_FAILURE;
mcm 2:cddf1d41f9b0 76 }