Template Software STM32F429 Discovery Kit with SCD41 CO2 Sensor

Dependencies:   LCD_DISCO_F429ZI TS_DISCO_F429ZI BSP_DISCO_F429ZI

scd30.h

Committer:
garj
Date:
2021-03-19
Revision:
7:17a87b6d8516
Child:
8:6906f3ee5538

File content as of revision 7:17a87b6d8516:

#ifndef SCD30_H
#define SCD30_H

#include "mbed.h"
// i2c sensor address
#define SCD30_ADR = 0x61;
// sensor automatically starts measurement. RDY pin signals measurement ready.
#define COMMAND_CONTINUOUS_MEASUREMENT {0x00, 0x10, 0x00, 0x00, 0x00}
#define COMMAND_CONTINUOUS_MEASUREMENT_LEN sizeof(COMMAND_CONTINUOUS_MEASUREMENT)
// 2s measurement Interval
#define COMMAND_SET_MEASUREMENT_INTERVAL {0x46, 0x00, 0x00, 0x02, 0x00}
#define COMMAND_SET_MEASUREMENT_INTERVAL_LEN sizeof(COMMAND_SET_MEASUREMENT_INTERVAL)
// automatic self calibration on
#define COMMAND_AUTOMATIC_SELF_CALIBRATION {0x53, 0x06, 0x00, 0x01, 0x00}
#define COMMAND_AUTOMATIC_SELF_CALIBRATION_LEN sizeof(COMMAND_AUTOMATIC_SELF_CALIBRATION)
// command that needs to be sent before reading out the measurement result
#define COMMAND_READ_MEASUREMENT {0x03, 0x00}
#define COMMAND_READ_MEASUREMENT_LEN sizeof(COMMAND_READ_MEASUREMENT)

    /** Create SCD30 controller class
     *
     * @param Scd30 class
     *
     */
class Scd30 {
 
public:
     enum ScdError {
         SCD_ERROR_NO_ERROR,
         SCD_ERROR_COM_ERROR
     };

    /** Create a SCD30 object using the specified I2C object
     * @param sda - mbed I2C interface pin
     * @param scl - mbed I2C interface pin
     * @param I2C Frequency (in Hz)
     *
     * @return none
     */
     Scd30(PinName sda, PinName scl, int i2cFrequency, PinName rdy);
    
    /** Initialize settings and start Auto-Measurement 
     *
     * @param --none--
     *
     * @return enum ScdError
     */
    uint8_t init();
    
    /** Check if measurement is ready
     *
     * @param --none--
     *
     * @return bool true=ready
     */
    bool isMeasurementReady();
    
    /** Read all environmental parameters (CO2, Temp and Hum) from sensor
     *
     * @param --none-
     *
     * @return enum ScdError
     */
    uint8_t readMeasurement();
    
    /** Get current CO2 value
     *
     * @param --none--
     *
     * @return enum SCDerror
     */
    float getCo2(){ return _co2;};
 
private:
    I2C           _i2c;
    DigitalIn     _rdy;
    float         _co2;
 
};    
#endif