1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

drivers/scd30: Add reset function to Sensirion scd30 sensor

This commit is contained in:
Nishchay-sopho 2020-10-14 13:37:18 +02:00
parent d5b89a5795
commit eb1064eef4
3 changed files with 36 additions and 2 deletions

View File

@ -167,6 +167,15 @@ int scd30_start_periodic_measurement(scd30_t *dev, uint16_t *interval,
*/
int8_t scd30_stop_measurements(const scd30_t *dev);
/**
* @brief Soft reset sensor
*
* @param dev scd30 dev device
*
* @return SCD30_OK if soft reset successful
*/
int8_t scd30_reset(scd30_t *dev);
#ifdef __cplusplus
}
#endif

View File

@ -44,6 +44,7 @@ extern "C" {
1013.25 mBar */
#define SCD30_READ_WRITE_SLEEP_US (4 * US_PER_MS)
#define SCD30_RESET_SLEEP_US (25 * US_PER_MS)
#define SCD30_DATA_RDY_TIMEOUT (1 * US_PER_SEC)
#define SCD30_MIN_INTERVAL 2

View File

@ -45,11 +45,18 @@ static float _raw_val_to_float(const uint8_t *buffer);
int8_t scd30_init(scd30_t *dev, const scd30_params_t *params)
{
DEBUG("[scd30] init\n");
int ret = 0;
uint16_t version;
dev->params = *params;
int ret = 0;
/* Soft reset sensor */
ret = scd30_reset(dev);
if (ret < 0) {
DEBUG("[scd30] Failed to reset sensor in init\n");
return ret;
}
uint16_t version;
ret = scd30_get_param(dev, SCD30_VERSION, &version);
DEBUG("[scd30] --- Version 0x%02x%02x\n", (version >> 8), version);
if (ret < 0) {
@ -237,6 +244,23 @@ int8_t scd30_stop_measurements(const scd30_t *dev)
return SCD30_OK;
}
int8_t scd30_reset(scd30_t *dev)
{
const uint16_t cmd = htons(SCD30_SOFT_RESET);
int ret;
i2c_acquire(SCD30_I2C);
ret = i2c_write_bytes(SCD30_I2C, SCD30_I2C_ADDRESS, &cmd, 2, 0);
i2c_release(SCD30_I2C);
if (ret != 0) {
DEBUG("[scd30]: Error resetting sensor.\n");
return ret;
}
xtimer_usleep(SCD30_RESET_SLEEP_US);
return SCD30_OK;
}
/**
* intern function to read data
*