/******************************************************************************
SparkFunCCS811.h
CCS811 Arduino library
Marshall Taylor @ SparkFun Electronics
Nathan Seidle @ SparkFun Electronics
April 4, 2017
https://github.com/sparkfun/CCS811_Air_Quality_Breakout
https://github.com/sparkfun/SparkFun_CCS811_Arduino_Library
Resources:
Uses Wire.h for i2c operation
Development environment specifics:
Arduino IDE 1.8.1
This code is released under the [MIT License](http://opensource.org/licenses/MIT).
Please review the LICENSE.md file included with this example. If you have any questions
or concerns with licensing, please contact techsupport@sparkfun.com.
Distributed as-is; no warranty is given.
******************************************************************************/
#ifndef __CCS811_H__
#define __CCS811_H__
#include "stdint.h"
#include <Wire.h>
//Register addresses
#define CSS811_STATUS 0x00
#define CSS811_MEAS_MODE 0x01
#define CSS811_ALG_RESULT_DATA 0x02
#define CSS811_RAW_DATA 0x03
#define CSS811_ENV_DATA 0x05
#define CSS811_NTC 0x06 //NTC compensation no longer supported
#define CSS811_THRESHOLDS 0x10
#define CSS811_BASELINE 0x11
#define CSS811_HW_ID 0x20
#define CSS811_HW_VERSION 0x21
#define CSS811_FW_BOOT_VERSION 0x23
#define CSS811_FW_APP_VERSION 0x24
#define CSS811_ERROR_ID 0xE0
#define CSS811_APP_START 0xF4
#define CSS811_SW_RESET 0xFF
//This is the core operational class of the driver.
// CCS811Core contains only read and write operations towards the sensor.
// To use the higher level functions, use the class CCS811 which inherits
// this class.
class CCS811Core
{
public:
// Return values
typedef enum
{
CCS811_Stat_SUCCESS,
CCS811_Stat_ID_ERROR,
CCS811_Stat_I2C_ERROR,
CCS811_Stat_INTERNAL_ERROR,
CCS811_Stat_NUM,
CCS811_Stat_GENERIC_ERROR
//...
} CCS811_Status_e;
CCS811Core(uint8_t);
~CCS811Core() = default;
void setI2CAddress(uint8_t address){
I2CAddress = address;
}
CCS811_Status_e beginCore(TwoWire &wirePort);
//***Reading functions***//
//readRegister reads one 8-bit register
CCS811_Status_e readRegister(uint8_t offset, uint8_t *outputPointer);
//multiReadRegister takes a uint8 array address as input and performs
// a number of consecutive reads
CCS811_Status_e multiReadRegister(uint8_t offset, uint8_t *outputPointer, uint8_t length);
//***Writing functions***//
//Writes an 8-bit byte;
CCS811_Status_e writeRegister(uint8_t offset, uint8_t dataToWrite);
//multiWriteRegister takes a uint8 array address as input and performs
// a number of consecutive writes
CCS811_Status_e multiWriteRegister(uint8_t offset, uint8_t *inputPointer, uint8_t length);
protected:
//Variables
TwoWire *_i2cPort; //The generic connection to user's chosen I2C hardware
uint8_t I2CAddress;
};
//This is the highest level class of the driver.
//
// class CCS811 inherits the CCS811Core and makes use of the beginCore()
//method through its own begin() method. It also contains user settings/values.
class CCS811 : public CCS811Core
{
public:
CCS811(uint8_t);
CCS811();
//Call to check for errors, start app, and set default mode 1
bool begin(TwoWire &wirePort = Wire); //Use the Wire hardware by default
CCS811_Status_e beginWithStatus(TwoWire &wirePort = Wire); //Use the Wire hardware by default
const char *statusString(CCS811_Status_e stat = CCS811_Stat_NUM); // Returns a human-readable status message. Defaults to status member, but prints string for supplied status if supplied
CCS811_Status_e readAlgorithmResults(void);
bool checkForStatusError(void);
bool dataAvailable(void);
bool appValid(void);
uint8_t getErrorRegister(void);
uint16_t getBaseline(void);
CCS811_Status_e setBaseline(uint16_t);
CCS811_Status_e enableInterrupts(void);
CCS811_Status_e disableInterrupts(void);
CCS811_Status_e setDriveMode(uint8_t mode);
CCS811_Status_e setEnvironmentalData(float relativeHumidity, float temperature);
void setRefResistance(float); //Unsupported feature. Refer to CPP file for more information.
CCS811_Status_e readNTC(void); //Unsupported feature. Refer to CPP file for more information.
uint16_t getTVOC(void);
uint16_t getCO2(void);
float getResistance(void); //Unsupported feature. Refer to CPP file for more information.
float getTemperature(void); //Unsupported feature. Refer to CPP file for more information.
private:
//These are the air quality values obtained from the sensor
float refResistance; //Unsupported feature. Refer to CPP file for more information.
float resistance; //Unsupported feature. Refer to CPP file for more information.
uint16_t tVOC;
uint16_t CO2;
uint16_t vrefCounts = 0;
uint16_t ntcCounts = 0;
float temperature;
};
#endif // End of definition check