CCS811 dumb library

Dependents:   Mt05_MtSense02 embernet-sensor-test

Committer:
johnathanlyu
Date:
Fri Apr 27 09:51:20 2018 +0000
Revision:
1:57eb62ded32d
Parent:
0:b5dbfc21185d
update initial flow

Who changed what in which revision?

UserRevisionLine numberNew contents of line
johnathanlyu 0:b5dbfc21185d 1 #include "CCS811.h"
johnathanlyu 0:b5dbfc21185d 2
johnathanlyu 1:57eb62ded32d 3 CCS811::CCS811(I2C& i2c, Serial& pc) : m_i2c(i2c), m_pc(pc) {
johnathanlyu 0:b5dbfc21185d 4
johnathanlyu 0:b5dbfc21185d 5 }
johnathanlyu 0:b5dbfc21185d 6
johnathanlyu 0:b5dbfc21185d 7 /**
johnathanlyu 0:b5dbfc21185d 8 ** Initial CCS811 need write MODE register and should Write APP START register to begin measurement.
johnathanlyu 0:b5dbfc21185d 9 **/
johnathanlyu 0:b5dbfc21185d 10 void CCS811::init() {
johnathanlyu 0:b5dbfc21185d 11 char send[2];
johnathanlyu 0:b5dbfc21185d 12
johnathanlyu 0:b5dbfc21185d 13 if (!checkHW()) {
johnathanlyu 0:b5dbfc21185d 14 return;
johnathanlyu 0:b5dbfc21185d 15 }else {
johnathanlyu 1:57eb62ded32d 16 m_pc.printf("CCS811 is confirm!\r\n");
johnathanlyu 0:b5dbfc21185d 17 }
johnathanlyu 0:b5dbfc21185d 18
johnathanlyu 1:57eb62ded32d 19 send[0] = CCS811_REG_APP_START;
johnathanlyu 1:57eb62ded32d 20 send[1] = 0x00;
johnathanlyu 1:57eb62ded32d 21
johnathanlyu 1:57eb62ded32d 22 m_i2c.write(CCS811_I2C_ADDR, send, 2);
johnathanlyu 1:57eb62ded32d 23
johnathanlyu 0:b5dbfc21185d 24 send[0] = CCS811_REG_MEAS_MODE;
johnathanlyu 0:b5dbfc21185d 25 send[1] = CCS811_MEASUREMENT_MODE1;
johnathanlyu 0:b5dbfc21185d 26
johnathanlyu 0:b5dbfc21185d 27 m_i2c.write(CCS811_I2C_ADDR, send, 2);
johnathanlyu 0:b5dbfc21185d 28
johnathanlyu 0:b5dbfc21185d 29 }
johnathanlyu 0:b5dbfc21185d 30
johnathanlyu 0:b5dbfc21185d 31 int CCS811::setMeasureMode(char mode) {
johnathanlyu 0:b5dbfc21185d 32
johnathanlyu 0:b5dbfc21185d 33 char send[2];
johnathanlyu 0:b5dbfc21185d 34
johnathanlyu 0:b5dbfc21185d 35 send[0] = CCS811_MEASUREMENT_MODE1;
johnathanlyu 0:b5dbfc21185d 36 send[1] = mode;
johnathanlyu 0:b5dbfc21185d 37
johnathanlyu 0:b5dbfc21185d 38 m_i2c.write(CCS811_I2C_ADDR, send, 2);
johnathanlyu 0:b5dbfc21185d 39
johnathanlyu 0:b5dbfc21185d 40 send[0] = CCS811_REG_APP_START;
johnathanlyu 0:b5dbfc21185d 41 send[1] = 0x00;
johnathanlyu 0:b5dbfc21185d 42
johnathanlyu 0:b5dbfc21185d 43 m_i2c.write(CCS811_I2C_ADDR, send, 2);
johnathanlyu 0:b5dbfc21185d 44
johnathanlyu 0:b5dbfc21185d 45 return 0;
johnathanlyu 0:b5dbfc21185d 46 }
johnathanlyu 0:b5dbfc21185d 47
johnathanlyu 0:b5dbfc21185d 48 /**
johnathanlyu 0:b5dbfc21185d 49 ** Here is that you can read CCS811 with co2 ppm and tvoc bbm is unsigned value
johnathanlyu 0:b5dbfc21185d 50 **/
johnathanlyu 0:b5dbfc21185d 51 int CCS811::readData(uint16_t *ECO2, uint16_t *TVOC) {
johnathanlyu 0:b5dbfc21185d 52
johnathanlyu 0:b5dbfc21185d 53 char recv[8];
johnathanlyu 0:b5dbfc21185d 54
johnathanlyu 0:b5dbfc21185d 55
johnathanlyu 0:b5dbfc21185d 56
johnathanlyu 0:b5dbfc21185d 57 recv[0] = CCS811_REG_ALG_RESULT_DATA;
johnathanlyu 0:b5dbfc21185d 58 m_i2c.write(CCS811_I2C_ADDR, recv, 1);
johnathanlyu 0:b5dbfc21185d 59 m_i2c.read( CCS811_I2C_ADDR, recv, 8);
johnathanlyu 0:b5dbfc21185d 60
johnathanlyu 1:57eb62ded32d 61 // m_pc.printf("%X %X\r\n", recv[0], recv[1]);
johnathanlyu 1:57eb62ded32d 62 // m_pc.printf("%X %X\r\n", recv[2], recv[3]);
johnathanlyu 1:57eb62ded32d 63 // m_pc.printf("%X %X\r\n", recv[4], recv[5]);
johnathanlyu 1:57eb62ded32d 64 // m_pc.printf("%X %X\r\n", recv[6], recv[7]);
johnathanlyu 0:b5dbfc21185d 65
johnathanlyu 0:b5dbfc21185d 66 *ECO2 = (uint16_t) (recv[0] <<8) + recv[1];
johnathanlyu 0:b5dbfc21185d 67 *TVOC = (uint16_t) (recv[2] <<8) + recv[3];
johnathanlyu 0:b5dbfc21185d 68
johnathanlyu 0:b5dbfc21185d 69 return 0;
johnathanlyu 0:b5dbfc21185d 70
johnathanlyu 0:b5dbfc21185d 71 }
johnathanlyu 0:b5dbfc21185d 72
johnathanlyu 0:b5dbfc21185d 73 /**
johnathanlyu 0:b5dbfc21185d 74 ** Here for check is CCS811 hardware from i2c bus
johnathanlyu 0:b5dbfc21185d 75 **/
johnathanlyu 0:b5dbfc21185d 76 bool CCS811::checkHW() {
johnathanlyu 0:b5dbfc21185d 77
johnathanlyu 0:b5dbfc21185d 78 char read[1];
johnathanlyu 0:b5dbfc21185d 79 char hid[1];
johnathanlyu 0:b5dbfc21185d 80
johnathanlyu 0:b5dbfc21185d 81 read[0] = CCS811_REG_HW_ID;
johnathanlyu 0:b5dbfc21185d 82
johnathanlyu 0:b5dbfc21185d 83 m_i2c.write(CCS811_I2C_ADDR, read, 1, false);
johnathanlyu 0:b5dbfc21185d 84 m_i2c.read(CCS811_I2C_ADDR, hid, 1, false);
johnathanlyu 0:b5dbfc21185d 85
johnathanlyu 1:57eb62ded32d 86 // m_pc.printf("%X\r\n", hid[0]);
johnathanlyu 0:b5dbfc21185d 87
johnathanlyu 0:b5dbfc21185d 88 if (hid[0] == 0x81) {
johnathanlyu 0:b5dbfc21185d 89 return true;
johnathanlyu 0:b5dbfc21185d 90 } else {
johnathanlyu 0:b5dbfc21185d 91 return false;
johnathanlyu 0:b5dbfc21185d 92 }
johnathanlyu 0:b5dbfc21185d 93
johnathanlyu 0:b5dbfc21185d 94 }
johnathanlyu 0:b5dbfc21185d 95
johnathanlyu 0:b5dbfc21185d 96 /**
johnathanlyu 0:b5dbfc21185d 97 ** Here is provide you soft reset CCS811 module
johnathanlyu 0:b5dbfc21185d 98 **/
johnathanlyu 0:b5dbfc21185d 99 bool CCS811::softRest() {
johnathanlyu 0:b5dbfc21185d 100
johnathanlyu 0:b5dbfc21185d 101 char rstCMD[5] = {CCS811_REG_SW_RESET, 0x11,0xE5,0x72,0x8A};
johnathanlyu 0:b5dbfc21185d 102
johnathanlyu 0:b5dbfc21185d 103 m_i2c.write(CCS811_I2C_ADDR, rstCMD, 5);
johnathanlyu 0:b5dbfc21185d 104
johnathanlyu 0:b5dbfc21185d 105 return false;
johnathanlyu 0:b5dbfc21185d 106
johnathanlyu 0:b5dbfc21185d 107 }
johnathanlyu 0:b5dbfc21185d 108