CCS811 dumb library

Dependents:   Mt05_MtSense02 embernet-sensor-test

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers CCS811.cpp Source File

CCS811.cpp

00001 #include "CCS811.h"
00002 
00003 CCS811::CCS811(I2C& i2c, Serial& pc) : m_i2c(i2c), m_pc(pc) {
00004     
00005 }
00006 
00007 /**
00008  ** Initial CCS811 need write MODE register and should Write APP START register to begin measurement.
00009  **/
00010 void CCS811::init() {
00011     char send[2];
00012     
00013     if (!checkHW()) {
00014         return;
00015     }else {
00016         m_pc.printf("CCS811 is confirm!\r\n");    
00017     }
00018     
00019     send[0] = CCS811_REG_APP_START;
00020     send[1] = 0x00;
00021     
00022     m_i2c.write(CCS811_I2C_ADDR, send, 2);
00023     
00024     send[0] = CCS811_REG_MEAS_MODE;
00025     send[1] = CCS811_MEASUREMENT_MODE1;
00026     
00027     m_i2c.write(CCS811_I2C_ADDR, send, 2);
00028     
00029 }
00030 
00031 int CCS811::setMeasureMode(char mode) {
00032     
00033     char send[2];
00034     
00035     send[0] = CCS811_MEASUREMENT_MODE1;
00036     send[1] = mode;
00037     
00038     m_i2c.write(CCS811_I2C_ADDR, send, 2);
00039     
00040     send[0] = CCS811_REG_APP_START;
00041     send[1] = 0x00;
00042     
00043     m_i2c.write(CCS811_I2C_ADDR, send, 2);
00044     
00045     return 0;
00046 }
00047 
00048 /**
00049  ** Here is that you can read CCS811 with co2 ppm and tvoc bbm is unsigned value
00050  **/
00051 int CCS811::readData(uint16_t *ECO2, uint16_t *TVOC) {
00052     
00053     char recv[8];
00054     
00055     
00056     
00057     recv[0] = CCS811_REG_ALG_RESULT_DATA;
00058     m_i2c.write(CCS811_I2C_ADDR, recv, 1);
00059     m_i2c.read( CCS811_I2C_ADDR, recv, 8);
00060 
00061 //    m_pc.printf("%X %X\r\n", recv[0], recv[1]);
00062 //    m_pc.printf("%X %X\r\n", recv[2], recv[3]);
00063 //    m_pc.printf("%X %X\r\n", recv[4], recv[5]);
00064 //    m_pc.printf("%X %X\r\n", recv[6], recv[7]);
00065     
00066     *ECO2 = (uint16_t) (recv[0] <<8) + recv[1];
00067     *TVOC = (uint16_t) (recv[2] <<8) + recv[3];
00068     
00069     return 0;
00070     
00071 }
00072 
00073 /**
00074  ** Here for check is CCS811 hardware from i2c bus
00075  **/
00076 bool CCS811::checkHW() {
00077 
00078     char read[1];
00079     char hid[1];
00080     
00081     read[0] = CCS811_REG_HW_ID;
00082     
00083     m_i2c.write(CCS811_I2C_ADDR, read, 1, false);
00084     m_i2c.read(CCS811_I2C_ADDR, hid, 1, false);
00085     
00086 //    m_pc.printf("%X\r\n", hid[0]);
00087     
00088     if (hid[0] == 0x81) {
00089         return true;
00090     } else {
00091         return false;
00092     }
00093     
00094 }
00095 
00096 /**
00097  **  Here is provide you soft reset CCS811 module 
00098  **/
00099 bool CCS811::softRest() {
00100      
00101     char rstCMD[5] = {CCS811_REG_SW_RESET, 0x11,0xE5,0x72,0x8A};
00102 
00103     m_i2c.write(CCS811_I2C_ADDR, rstCMD, 5);
00104     
00105     return false;
00106       
00107 }
00108