SPS30 library
Dependents: IZU2021_SPS30 Hybrid_IZU2021_MISSION_v2 Hybrid_IZU2021_MISSION
Diff: sps30.cpp
- Revision:
- 2:549bee9a4cd0
- Parent:
- 0:9221dac25d3b
- Child:
- 4:7558ddc3c7d6
--- a/sps30.cpp Tue Mar 05 03:05:33 2019 +0000 +++ b/sps30.cpp Tue Mar 05 07:01:55 2019 +0000 @@ -15,10 +15,10 @@ } //----------------------------------------------------------------------------- -// start auto-measurement with barometer reading (in mB) +// start auto-measurement // -uint8_t sps30::startMeasurement() // done +uint8_t sps30::startMeasurement() { i2cBuff[0] = SPS30_CMMD_STRT_MEAS >> 8; i2cBuff[1] = SPS30_CMMD_STRT_MEAS & 255; @@ -33,7 +33,7 @@ //----------------------------------------------------------------------------- // Stop auto-measurement -uint8_t sps30::stopMeasurement() // done +uint8_t sps30::stopMeasurement() { i2cBuff[0] = SPS30_CMMD_STOP_MEAS >> 8; i2cBuff[1] = SPS30_CMMD_STOP_MEAS & 255; @@ -45,7 +45,7 @@ //----------------------------------------------------------------------------- // Get ready status value -uint8_t sps30::getReadyStatus() // done +uint8_t sps30::getReadyStatus() { i2cBuff[0] = SPS30_CMMD_GET_READY_STAT >> 8; i2cBuff[1] = SPS30_CMMD_GET_READY_STAT & 255; @@ -65,7 +65,7 @@ //----------------------------------------------------------------------------- // Get all the measurement values, stick them into the array -uint8_t sps30::readMeasurement() // editing +uint8_t sps30::readMeasurement() { i2cBuff[0] = SPS30_CMMD_READ_MEAS >> 8; i2cBuff[1] = SPS30_CMMD_READ_MEAS & 255; @@ -74,7 +74,6 @@ _i2c.read(SPS30_I2C_ADDR | 1, i2cBuff, 60, false); - /* TO DO: update the members used in the class */ uint16_t stat = (i2cBuff[0] << 8) | i2cBuff[1]; mass_1p0_m = stat; uint8_t dat = sps30::checkCrc2b(stat, i2cBuff[2]); @@ -315,6 +314,85 @@ } //----------------------------------------------------------------------------- +// Read Auto Cleaning Interval on the SPS30 + +uint8_t sps30::readAutoCleanInterval() +{ + i2cBuff[0] = SPS30_CMMD_AUTO_CLEAN_INTV >> 8; + i2cBuff[1] = SPS30_CMMD_AUTO_CLEAN_INTV & 255; + + int res = _i2c.write(SPS30_I2C_ADDR, i2cBuff, 2, false); + if(res) return SPSnoAckERROR; + + _i2c.read(SPS30_I2C_ADDR | 1, i2cBuff, 6, false); + + uint16_t stat = (i2cBuff[0] << 8) | i2cBuff[1]; + clean_interval_m = stat; + uint8_t dat = sps30::checkCrc2b(stat, i2cBuff[2]); + if(dat == SPScrcERROR) return SPScrcERROR; + + stat = (i2cBuff[3] << 8) | i2cBuff[4]; + clean_interval_l = stat; + dat = sps30::checkCrc2b(stat, i2cBuff[5]); + if(dat == SPScrcERROR) return SPScrcERROR; + + clean_interval_i = (clean_interval_m << 16) | clean_interval_l; + + return SPSnoERROR; +} + +//----------------------------------------------------------------------------- +// Set Auto Cleaning Interval on the SPS30 + +uint8_t sps30::setAutoCleanInterval(uint32_t set_interval) +{ + uint16_t set_interval_m = set_interval >> 16; + uint16_t set_interval_l = set_interval & 65535; + + i2cBuff[0] = SPS30_CMMD_AUTO_CLEAN_INTV >> 8; + i2cBuff[1] = SPS30_CMMD_AUTO_CLEAN_INTV & 255; + + i2cBuff[2] = set_interval_m >> 8; + i2cBuff[3] = set_interval_m & 255; + i2cBuff[4] = sps30::calcCrc2b(set_interval_m); + + i2cBuff[5] = set_interval_l >> 8; + i2cBuff[6] = set_interval_l & 255; + i2cBuff[7] = sps30::calcCrc2b(set_interval_l); + + int res = _i2c.write(SPS30_I2C_ADDR, i2cBuff, 8, false); + if(res) return SPSnoAckERROR; + + _i2c.read(SPS30_I2C_ADDR | 1, i2cBuff, 6, false); + + uint16_t stat = (i2cBuff[0] << 8) | i2cBuff[1]; + clean_interval_m = stat; + uint8_t dat = sps30::checkCrc2b(stat, i2cBuff[2]); + if(dat == SPScrcERROR) return SPScrcERROR; + + stat = (i2cBuff[3] << 8) | i2cBuff[4]; + clean_interval_l = stat; + dat = sps30::checkCrc2b(stat, i2cBuff[5]); + if(dat == SPScrcERROR) return SPScrcERROR; + + clean_interval_i = (clean_interval_m << 16) | clean_interval_l; + + return SPSnoERROR; +} + +//----------------------------------------------------------------------------- +// Perform manual fan cleaning + +uint8_t sps30::startFanClean() +{ + i2cBuff[0] = SPS30_CMMD_START_FAN_CLEAN >> 8; + i2cBuff[1] = SPS30_CMMD_START_FAN_CLEAN & 255; + int res = _i2c.write(SPS30_I2C_ADDR, i2cBuff, 2, false); + if(res) return SPSnoAckERROR; + return SPSnoERROR; +} + +//----------------------------------------------------------------------------- // Perform a soft reset on the SPS30 uint8_t sps30::softReset()