diff --git a/neosensor/libraries/neocampus_drivers/SCD4x.cpp b/neosensor/libraries/neocampus_drivers/SCD4x.cpp index 97d532c730cd473537dcaed25f7314a56a569e6d..8d4a050ab308cf8baeab71c4a5c438349c1a6569 100644 --- a/neosensor/libraries/neocampus_drivers/SCD4x.cpp +++ b/neosensor/libraries/neocampus_drivers/SCD4x.cpp @@ -42,16 +42,17 @@ const uint8_t SCD4x::i2c_addrs[] = { 0x69 }; -/* declare kind of units */ +/* [static] declare kind of units */ const char *SCD4x::units_co2 = "ppm"; const char *SCD4x::units_temp = "celsius"; const char *SCD4x::units_rh = "%r.H."; -/* declare others static vars */ +/* [static] initialize static vars */ unsigned long SCD4x::_lastMsRead = 0; uint16_t SCD4x::_co2_sensor = (uint16_t)(-1); uint16_t SCD4x::_t_sensor = (uint16_t)(-1); uint16_t SCD4x::_rh_sensor = (uint16_t)(-1); +boolean SCD4x::_periodic_measure = false; /**************************************************************************/ @@ -124,15 +125,24 @@ boolean SCD4x::begin( uint8_t addr=-1) { if( (addr < (uint8_t)(I2C_ADDR_START)) or (addr > (uint8_t)(I2C_ADDR_STOP)) ) return false; _i2caddr = addr; + +WARNING: if periodic measurement is already started ==> no others command will be accepted + + // check device identity if( !_check_identity(_i2caddr) ) return false; /* set config: - * - nothing to configure - * - reset ? + * - software reset + * - calibration ? + * - start periodic measurement */ - // define defaults parameters + // soft reset + sw_reset( _i2caddr ); + + // start periodic measurement +TO BE CONTINUED /* start lastmsg time measurement. * This way, we get sure to have at least a first acquisition! */ @@ -148,10 +158,14 @@ boolean SCD4x::begin( uint8_t addr=-1) { */ void SCD4x::powerON( void ) { + // check if device's periodic measurement is not already engaged + if( _periodic_measure ) return; + // select proper command - uint16_t _cmd = static_cast<uint16_t>(scd4xCmd_t::read_measurement); + uint16_t _cmd = static_cast<uint16_t>(scd4xCmd_t::start_periodic_measurement); + _i2caddr - // device does not feature continuous integration so nothing to start or stop + _periodic_measure = true; } /* diff --git a/neosensor/libraries/neocampus_drivers/SCD4x.h b/neosensor/libraries/neocampus_drivers/SCD4x.h index 54ae6ba11b96cb2fcbe9eb67d1a4984ad6fe1ed5..8f9d1ba0ef4d6288cc1edbd1436b41c528bf6dea 100644 --- a/neosensor/libraries/neocampus_drivers/SCD4x.h +++ b/neosensor/libraries/neocampus_drivers/SCD4x.h @@ -149,6 +149,7 @@ class SCD4x : public generic_driver { static uint16_t _co2_sensor; // shared across all instances static uint16_t _t_sensor; // shared across all instances static uint16_t _rh_sensor; // shared across all instances + static boolean _periodic_measure; // if automatic periodic measurement has been activated // CRC computation static const uint8_t _crc8_polynom; // crc P(x)=x^8+x^5+x^4+1 (0x31) 1.00110001, init=0xFF diff --git a/neosensor/libraries/neocampus_drivers/SHT3x.cpp b/neosensor/libraries/neocampus_drivers/SHT3x.cpp index 471ed6ef2945ab8fced55178c7bebd0dc31fb955..7080a1b96ef74812c4b3a6af7a1c53cdca167895 100644 --- a/neosensor/libraries/neocampus_drivers/SHT3x.cpp +++ b/neosensor/libraries/neocampus_drivers/SHT3x.cpp @@ -38,7 +38,6 @@ /**************************************************************************/ /*! @brief Declare list of possible I2C addrs - Note: only one i2c addr ! */ /**************************************************************************/ const uint8_t SHT3x::i2c_addrs[2] = { 0x44, 0x45 };