From 107239c4f2220d2d147c13f87e5313cd8c288cbd Mon Sep 17 00:00:00 2001 From: Francois <thiebolt@irit.fr> Date: Tue, 15 Mar 2022 01:36:20 +0100 Subject: [PATCH] update --- .../libraries/neocampus_drivers/SCD4x.cpp | 9 ++++++-- .../libraries/neocampus_drivers/TSL2561.cpp | 23 +++++++++++++++---- .../libraries/neocampus_drivers/TSL2561.h | 2 ++ .../libraries/neocampus_modules/humidity.cpp | 15 ++++++++++++ .../libraries/neocampus_modules/humidity.h | 1 + .../neocampus_modules/temperature.cpp | 2 +- 6 files changed, 45 insertions(+), 7 deletions(-) diff --git a/neosensor/libraries/neocampus_drivers/SCD4x.cpp b/neosensor/libraries/neocampus_drivers/SCD4x.cpp index a8bc977b..8e0010be 100644 --- a/neosensor/libraries/neocampus_drivers/SCD4x.cpp +++ b/neosensor/libraries/neocampus_drivers/SCD4x.cpp @@ -281,7 +281,7 @@ boolean SCD4x::getRH( float *pval ) { _tmp = (625 * _tmp) >> 12; *pval = (float)_tmp / 100.0f; - _rh_sensor = false; + _rh_sensor_valid = false; return true; } @@ -295,11 +295,16 @@ boolean SCD4x::getRH( float *pval ) { * Software reset through I2C command */ void SCD4x::sw_reset( uint8_t adr ) { + log_debug(F("\n[SCD4x] SOFT RESET action started ..."));log_flush(); + + _writeCmd( adr, static_cast<uint16_t>(scd4xCmd_t::stop_periodic_measurement) ); + delay(500); + _periodic_measure = false; + _writeCmd( adr, static_cast<uint16_t>(scd4xCmd_t::reinit) ); delay( 20 ); - _periodic_measure = false; } diff --git a/neosensor/libraries/neocampus_drivers/TSL2561.cpp b/neosensor/libraries/neocampus_drivers/TSL2561.cpp index a8185a43..44be5d65 100644 --- a/neosensor/libraries/neocampus_drivers/TSL2561.cpp +++ b/neosensor/libraries/neocampus_drivers/TSL2561.cpp @@ -142,14 +142,12 @@ boolean TSL2561::begin( uint8_t addr=INVALID_I2CADDR ) { void TSL2561::powerON(void) { - // Enable the device by setting the control bit to 0x03 - write8(_i2caddr, TSL2561_COMMAND_BIT | TSL2561_CLEAR_BIT | TSL2561_REGISTER_CONTROL, TSL2561_CONTROL_POWERON); + _powerON( _i2caddr ); } void TSL2561::powerOFF(void) { - // Disable the device by setting the control bit to 0x03 - write8(_i2caddr, TSL2561_COMMAND_BIT | TSL2561_CLEAR_BIT | TSL2561_REGISTER_CONTROL, TSL2561_CONTROL_POWEROFF); + _powerOFF( _i2caddr ); } @@ -193,11 +191,28 @@ void TSL2561::setTiming(tsl2561IntegrationTime_t integration) { * Private methods */ +/* + * static PowerON/OFF (for static acquire) + */ +void TSL2561::_powerON( uint8_t a ) { + // Enable the device by setting the control bit to 0x03 + write8( a, TSL2561_COMMAND_BIT | TSL2561_CLEAR_BIT | TSL2561_REGISTER_CONTROL, TSL2561_CONTROL_POWERON); +} + +void TSL2561::_powerOFF( uint8_t a ) { + // Disable the device by setting the control bit to 0x03 + write8( a, TSL2561_COMMAND_BIT | TSL2561_CLEAR_BIT | TSL2561_REGISTER_CONTROL, TSL2561_CONTROL_POWEROFF); +} + /* * Check that device identity is what we expect! */ bool TSL2561::_check_identity( uint8_t a ) { + // stop'n start device + _powerOFF(a); delay(10); + _powerON(a); delay(10); + // check Register ID uint8_t _res = read8(a,TSL2561_REGISTER_ID); if( (_res&0xF0)!=REGISTER_ID_TSL2561 and (_res&0xF0)!=0x00 ) return false; diff --git a/neosensor/libraries/neocampus_drivers/TSL2561.h b/neosensor/libraries/neocampus_drivers/TSL2561.h index 37ebcd03..d604bf50 100644 --- a/neosensor/libraries/neocampus_drivers/TSL2561.h +++ b/neosensor/libraries/neocampus_drivers/TSL2561.h @@ -221,6 +221,8 @@ class TSL2561 : public generic_driver { static const char *units; // methods + static void _powerON( uint8_t ); // power UP device + static void _powerOFF( uint8_t ); // power DOWN device static bool _check_identity( uint8_t ); // check device is what we expect! void _getData( uint16_t *broadband, uint16_t *ir ); }; diff --git a/neosensor/libraries/neocampus_modules/humidity.cpp b/neosensor/libraries/neocampus_modules/humidity.cpp index b1522848..badd125c 100644 --- a/neosensor/libraries/neocampus_modules/humidity.cpp +++ b/neosensor/libraries/neocampus_modules/humidity.cpp @@ -108,6 +108,21 @@ boolean humidity::add_sensor( uint8_t adr ) { _sensor_added=true; } } + // check for SCD4x + else if( SCD4x::is_device( adr ) == true ) { + SCD4x *cur_sensor = new SCD4x( scd4xMeasureType_t::humidity ); // because it features several sensors + if( cur_sensor->begin( adr ) != true ) { + log_debug(F("\n[temperature] ###ERROR at SCD4x startup ... removing instance ..."));log_flush(); + free(cur_sensor); + cur_sensor = NULL; + } + else { + cur_sensor->powerON(); // remember that device is shared across several modules + cur_sensor->powerOFF(); // remember that device is shared across several modules + _sensor[_sensors_count++] = cur_sensor; + _sensor_added=true; + } + } // add check for additional device here diff --git a/neosensor/libraries/neocampus_modules/humidity.h b/neosensor/libraries/neocampus_modules/humidity.h index 1f28471e..f9d4ce7e 100644 --- a/neosensor/libraries/neocampus_modules/humidity.h +++ b/neosensor/libraries/neocampus_modules/humidity.h @@ -25,6 +25,7 @@ #include "generic_driver.h" #include "SHT2x.h" #include "SHT3x.h" +#include "SCD4x.h" // Sensirion SCD4X CO2 sensor including temp + hygro diff --git a/neosensor/libraries/neocampus_modules/temperature.cpp b/neosensor/libraries/neocampus_modules/temperature.cpp index 9d90dc54..b9fad5fe 100644 --- a/neosensor/libraries/neocampus_modules/temperature.cpp +++ b/neosensor/libraries/neocampus_modules/temperature.cpp @@ -129,7 +129,7 @@ boolean temperature::add_sensor( uint8_t adr ) { _sensor_added=true; } } - // check for SHT3x + // check for SCD4x else if( SCD4x::is_device( adr ) == true ) { SCD4x *cur_sensor = new SCD4x( scd4xMeasureType_t::temperature ); // because it features several sensors if( cur_sensor->begin( adr ) != true ) { -- GitLab