-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSparkFunCCS811.h
145 lines (119 loc) · 4.64 KB
/
SparkFunCCS811.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/******************************************************************************
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