From 04426dcb233ae940671e4f30df3ea387539b74a2 Mon Sep 17 00:00:00 2001 From: Francois <thiebolt@irit.fr> Date: Sat, 12 Mar 2022 18:22:15 +0100 Subject: [PATCH] update --- .../libraries/neocampus_drivers/SCD4x.cpp | 28 ++++++++++++++----- neosensor/libraries/neocampus_drivers/SCD4x.h | 1 + .../libraries/neocampus_drivers/SHT3x.cpp | 1 - 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/neosensor/libraries/neocampus_drivers/SCD4x.cpp b/neosensor/libraries/neocampus_drivers/SCD4x.cpp index 97d532c7..8d4a050a 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 54ae6ba1..8f9d1ba0 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 471ed6ef..7080a1b9 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 }; -- GitLab