CCS811 dumb library
Dependents: Mt05_MtSense02 embernet-sensor-test
CCS811.cpp
- Committer:
- johnathanlyu
- Date:
- 2017-06-27
- Revision:
- 0:b5dbfc21185d
- Child:
- 1:57eb62ded32d
File content as of revision 0:b5dbfc21185d:
#include "CCS811.h" CCS811::CCS811(I2C& i2c) : m_i2c(i2c), pc(p5, p4) { } /** ** Initial CCS811 need write MODE register and should Write APP START register to begin measurement. **/ void CCS811::init() { char send[2]; if (!checkHW()) { return; }else { pc.printf("CCS811 is confirm!\r\n"); } send[0] = CCS811_REG_MEAS_MODE; send[1] = CCS811_MEASUREMENT_MODE1; m_i2c.write(CCS811_I2C_ADDR, send, 2); send[0] = CCS811_REG_APP_START; send[1] = 0x00; m_i2c.write(CCS811_I2C_ADDR, send, 2); } int CCS811::setMeasureMode(char mode) { char send[2]; send[0] = CCS811_MEASUREMENT_MODE1; send[1] = mode; m_i2c.write(CCS811_I2C_ADDR, send, 2); send[0] = CCS811_REG_APP_START; send[1] = 0x00; m_i2c.write(CCS811_I2C_ADDR, send, 2); return 0; } /** ** Here is that you can read CCS811 with co2 ppm and tvoc bbm is unsigned value **/ int CCS811::readData(uint16_t *ECO2, uint16_t *TVOC) { char recv[8]; recv[0] = CCS811_REG_ALG_RESULT_DATA; m_i2c.write(CCS811_I2C_ADDR, recv, 1); m_i2c.read( CCS811_I2C_ADDR, recv, 8); // pc.printf("%X %X\r\n", recv[0], recv[1]); // pc.printf("%X %X\r\n", recv[2], recv[3]); // pc.printf("%X %X\r\n", recv[4], recv[5]); // pc.printf("%X %X\r\n", recv[6], recv[7]); *ECO2 = (uint16_t) (recv[0] <<8) + recv[1]; *TVOC = (uint16_t) (recv[2] <<8) + recv[3]; return 0; } /** ** Here for check is CCS811 hardware from i2c bus **/ bool CCS811::checkHW() { char read[1]; char hid[1]; read[0] = CCS811_REG_HW_ID; m_i2c.write(CCS811_I2C_ADDR, read, 1, false); m_i2c.read(CCS811_I2C_ADDR, hid, 1, false); // pc.printf("%X\r\n", hid[0]); if (hid[0] == 0x81) { return true; } else { return false; } } /** ** Here is provide you soft reset CCS811 module **/ bool CCS811::softRest() { char rstCMD[5] = {CCS811_REG_SW_RESET, 0x11,0xE5,0x72,0x8A}; m_i2c.write(CCS811_I2C_ADDR, rstCMD, 5); return false; }