Indoor Air Quality Sensor Module
Dependents: Sensor_iAQ_core Sensor_iAQ_sgp30_bme_si7051 POCBreath_V2_smd_commercial
iAQ_Core.cpp@3:53c56ce59c29, 2018-06-11 (annotated)
- 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?
User | Revision | Line number | New 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 | } |