First working version of CDM7160 library
CDM7160.h@2:207717b5eaee, 2020-05-04 (annotated)
- Committer:
- MichalKozlowski
- Date:
- Mon May 04 11:33:36 2020 +0000
- Revision:
- 2:207717b5eaee
- Parent:
- 1:4a0a9c03afba
Atmospheric pressure and altitude compensation switched to ON by default
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| MichalKozlowski | 0:8fe9c25985e5 | 1 | /** |
| MichalKozlowski | 0:8fe9c25985e5 | 2 | * Project: CDM7160 |
| MichalKozlowski | 0:8fe9c25985e5 | 3 | * Company: yosensi.io |
| MichalKozlowski | 0:8fe9c25985e5 | 4 | * CodeWriter: Michal Kozlowski |
| MichalKozlowski | 0:8fe9c25985e5 | 5 | * File: CDM7160.h |
| MichalKozlowski | 0:8fe9c25985e5 | 6 | * Date: 09-09-2019 |
| MichalKozlowski | 0:8fe9c25985e5 | 7 | * Description: CDM7160 Driver Header File |
| MichalKozlowski | 0:8fe9c25985e5 | 8 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 9 | |
| MichalKozlowski | 0:8fe9c25985e5 | 10 | /** |
| MichalKozlowski | 0:8fe9c25985e5 | 11 | * #include "mbed.h" |
| MichalKozlowski | 0:8fe9c25985e5 | 12 | * #include "CDM7160.h" |
| MichalKozlowski | 0:8fe9c25985e5 | 13 | * |
| MichalKozlowski | 0:8fe9c25985e5 | 14 | * DigitalIn busy(PC_8); |
| MichalKozlowski | 0:8fe9c25985e5 | 15 | * CDM7160 CO2(PB_9, PB_8); |
| MichalKozlowski | 0:8fe9c25985e5 | 16 | * InterruptIn sw(USER_BUTTON); |
| MichalKozlowski | 0:8fe9c25985e5 | 17 | * InterruptIn irq(PC_9); |
| MichalKozlowski | 0:8fe9c25985e5 | 18 | * |
| MichalKozlowski | 0:8fe9c25985e5 | 19 | * volatile bool button, isIrq; |
| MichalKozlowski | 0:8fe9c25985e5 | 20 | * |
| MichalKozlowski | 0:8fe9c25985e5 | 21 | * void buttonCallback(){ |
| MichalKozlowski | 0:8fe9c25985e5 | 22 | * button = true; |
| MichalKozlowski | 0:8fe9c25985e5 | 23 | * } |
| MichalKozlowski | 0:8fe9c25985e5 | 24 | * |
| MichalKozlowski | 0:8fe9c25985e5 | 25 | * void irqCallback(){ |
| MichalKozlowski | 0:8fe9c25985e5 | 26 | * isIrq = true; |
| MichalKozlowski | 0:8fe9c25985e5 | 27 | * } |
| MichalKozlowski | 0:8fe9c25985e5 | 28 | * |
| MichalKozlowski | 0:8fe9c25985e5 | 29 | * int main() |
| MichalKozlowski | 0:8fe9c25985e5 | 30 | * { |
| MichalKozlowski | 1:4a0a9c03afba | 31 | * int i=0; // Number of measurement |
| MichalKozlowski | 0:8fe9c25985e5 | 32 | * irq.rise(&irqCallback); |
| MichalKozlowski | 0:8fe9c25985e5 | 33 | * //irq.fall(&irqCallback); |
| MichalKozlowski | 0:8fe9c25985e5 | 34 | * sw.rise(&buttonCallback); |
| MichalKozlowski | 0:8fe9c25985e5 | 35 | * |
| MichalKozlowski | 0:8fe9c25985e5 | 36 | * |
| MichalKozlowski | 1:4a0a9c03afba | 37 | * if(CO2.initIntegrated() == CDM7160_I2C_ADDR){ |
| MichalKozlowski | 0:8fe9c25985e5 | 38 | * printf("Initialization Success\r\n\n"); |
| MichalKozlowski | 0:8fe9c25985e5 | 39 | * } |
| MichalKozlowski | 0:8fe9c25985e5 | 40 | * if(CO2.setAlarmLimits(1500,1450) == CDM7160_SUCCESS){ |
| MichalKozlowski | 0:8fe9c25985e5 | 41 | * printf("Alarm Limits has been set!\r\n"); |
| MichalKozlowski | 0:8fe9c25985e5 | 42 | * } |
| MichalKozlowski | 0:8fe9c25985e5 | 43 | * |
| MichalKozlowski | 0:8fe9c25985e5 | 44 | * while (true) { |
| MichalKozlowski | 0:8fe9c25985e5 | 45 | * if(button){ |
| MichalKozlowski | 0:8fe9c25985e5 | 46 | * if(CO2.getAlarmLimits() == CDM7160_SUCCESS){ |
| MichalKozlowski | 0:8fe9c25985e5 | 47 | * printf("High Alert Limit = %d Low Alert Limit = %d\r\n", CO2.cdm7160.highAlertLimit, CO2.cdm7160.lowAlertLimit); |
| MichalKozlowski | 0:8fe9c25985e5 | 48 | * } |
| MichalKozlowski | 0:8fe9c25985e5 | 49 | * if(CO2.getAirPressureAndAltitude() == CDM7160_SUCCESS){ |
| MichalKozlowski | 0:8fe9c25985e5 | 50 | * printf("Atmosferic Pressure = %d [hPa] Altitude = %d [m]\r\n", CO2.cdm7160.atmosferic_pressure, CO2.cdm7160.altitude); |
| MichalKozlowski | 0:8fe9c25985e5 | 51 | * } |
| MichalKozlowski | 0:8fe9c25985e5 | 52 | * button = false; |
| MichalKozlowski | 0:8fe9c25985e5 | 53 | * } |
| MichalKozlowski | 0:8fe9c25985e5 | 54 | * |
| MichalKozlowski | 0:8fe9c25985e5 | 55 | * if(busy == 0){ |
| MichalKozlowski | 0:8fe9c25985e5 | 56 | * if(i==0){ |
| MichalKozlowski | 0:8fe9c25985e5 | 57 | * wait(2); |
| MichalKozlowski | 0:8fe9c25985e5 | 58 | * isIrq = false; |
| MichalKozlowski | 0:8fe9c25985e5 | 59 | * }else{ |
| MichalKozlowski | 0:8fe9c25985e5 | 60 | * printf("CO2 = %d [ppm]\r\n", CO2.getCO2()); |
| MichalKozlowski | 1:4a0a9c03afba | 61 | * wait(2); |
| MichalKozlowski | 0:8fe9c25985e5 | 62 | * if(isIrq){ |
| MichalKozlowski | 0:8fe9c25985e5 | 63 | * printf("Interrupt !!!\r\n"); |
| MichalKozlowski | 0:8fe9c25985e5 | 64 | * isIrq = false; |
| MichalKozlowski | 0:8fe9c25985e5 | 65 | * } |
| MichalKozlowski | 0:8fe9c25985e5 | 66 | * } |
| MichalKozlowski | 0:8fe9c25985e5 | 67 | * i++; |
| MichalKozlowski | 0:8fe9c25985e5 | 68 | * } |
| MichalKozlowski | 0:8fe9c25985e5 | 69 | * } |
| MichalKozlowski | 0:8fe9c25985e5 | 70 | * } |
| MichalKozlowski | 0:8fe9c25985e5 | 71 | * |
| MichalKozlowski | 0:8fe9c25985e5 | 72 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 73 | |
| MichalKozlowski | 0:8fe9c25985e5 | 74 | #include "mbed.h" |
| MichalKozlowski | 0:8fe9c25985e5 | 75 | |
| MichalKozlowski | 0:8fe9c25985e5 | 76 | #ifndef CDM7160_H |
| MichalKozlowski | 0:8fe9c25985e5 | 77 | #define CDM7160_H |
| MichalKozlowski | 0:8fe9c25985e5 | 78 | |
| MichalKozlowski | 0:8fe9c25985e5 | 79 | #include "mbed.h" |
| MichalKozlowski | 0:8fe9c25985e5 | 80 | |
| MichalKozlowski | 0:8fe9c25985e5 | 81 | /** |
| MichalKozlowski | 0:8fe9c25985e5 | 82 | * Sensor I2C address |
| MichalKozlowski | 0:8fe9c25985e5 | 83 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 84 | //#define CDM7160_I2C_ADDR 0x68 // CAD0 pin to low logic |
| MichalKozlowski | 0:8fe9c25985e5 | 85 | #define CDM7160_I2C_ADDR 0x69 // CAD0 pin to high logic (left floating) |
| MichalKozlowski | 0:8fe9c25985e5 | 86 | |
| MichalKozlowski | 0:8fe9c25985e5 | 87 | #define DIR_BIT_WRITE 0x00 |
| MichalKozlowski | 0:8fe9c25985e5 | 88 | #define DIR_BIT_READ 0x01 |
| MichalKozlowski | 0:8fe9c25985e5 | 89 | |
| MichalKozlowski | 0:8fe9c25985e5 | 90 | /** |
| MichalKozlowski | 0:8fe9c25985e5 | 91 | * Sensor name |
| MichalKozlowski | 0:8fe9c25985e5 | 92 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 93 | #define CDM7160_NAME "CDM7160" |
| MichalKozlowski | 0:8fe9c25985e5 | 94 | #define CDM7160_NAME_LEN 8 |
| MichalKozlowski | 0:8fe9c25985e5 | 95 | |
| MichalKozlowski | 0:8fe9c25985e5 | 96 | /** |
| MichalKozlowski | 0:8fe9c25985e5 | 97 | * Measurements number |
| MichalKozlowski | 0:8fe9c25985e5 | 98 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 99 | #define CDM7160_MEASURE_NBR 1 |
| MichalKozlowski | 0:8fe9c25985e5 | 100 | |
| MichalKozlowski | 0:8fe9c25985e5 | 101 | #define CDM7160_CRC_POLYNOMIAL 0x31 |
| MichalKozlowski | 0:8fe9c25985e5 | 102 | #define CDM7160_CRC8_INIT 0xFF |
| MichalKozlowski | 0:8fe9c25985e5 | 103 | |
| MichalKozlowski | 0:8fe9c25985e5 | 104 | |
| MichalKozlowski | 0:8fe9c25985e5 | 105 | /** |
| MichalKozlowski | 0:8fe9c25985e5 | 106 | * Conditions on I2C bus. |
| MichalKozlowski | 0:8fe9c25985e5 | 107 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 108 | #define CDM7160_SUCCESS 0 |
| MichalKozlowski | 0:8fe9c25985e5 | 109 | #define CDM7160_ERROR -1 |
| MichalKozlowski | 0:8fe9c25985e5 | 110 | |
| MichalKozlowski | 0:8fe9c25985e5 | 111 | /** Macros - Build 2-Byte data |
| MichalKozlowski | 0:8fe9c25985e5 | 112 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 113 | #define CDM7160_2B_BUILD(hiByte, loByte) ((uint16_t)(((loByte) & 0x00FF) | (((hiByte) & 0x00FF) << 8))) |
| MichalKozlowski | 0:8fe9c25985e5 | 114 | |
| MichalKozlowski | 0:8fe9c25985e5 | 115 | /** Macros - Split 2-Byte data |
| MichalKozlowski | 0:8fe9c25985e5 | 116 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 117 | #define CDM7160_HI_BYTE(reg) (((reg) >> 8) & 0xFF) |
| MichalKozlowski | 0:8fe9c25985e5 | 118 | #define CDM7160_LO_BYTE(reg) ((reg) & 0xFF) |
| MichalKozlowski | 0:8fe9c25985e5 | 119 | |
| MichalKozlowski | 0:8fe9c25985e5 | 120 | /** |
| MichalKozlowski | 0:8fe9c25985e5 | 121 | * @class CDM7160 |
| MichalKozlowski | 0:8fe9c25985e5 | 122 | * @brief Implementation of CDM7160 sensor CO2 library |
| MichalKozlowski | 0:8fe9c25985e5 | 123 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 124 | class CDM7160{ |
| MichalKozlowski | 0:8fe9c25985e5 | 125 | |
| MichalKozlowski | 0:8fe9c25985e5 | 126 | public: |
| MichalKozlowski | 0:8fe9c25985e5 | 127 | |
| MichalKozlowski | 0:8fe9c25985e5 | 128 | /** eReg read/write commands |
| MichalKozlowski | 0:8fe9c25985e5 | 129 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 130 | enum eReg { |
| MichalKozlowski | 0:8fe9c25985e5 | 131 | RST = 0x00, // software reset |
| MichalKozlowski | 0:8fe9c25985e5 | 132 | CTL = 0x01, // operating mode |
| MichalKozlowski | 0:8fe9c25985e5 | 133 | ST1 = 0x02, // status register |
| MichalKozlowski | 0:8fe9c25985e5 | 134 | DAL = 0x03, // LSB CO2 data |
| MichalKozlowski | 0:8fe9c25985e5 | 135 | DAH = 0x04, // MSB CO2 data |
| MichalKozlowski | 0:8fe9c25985e5 | 136 | HPA = 0x09, // atmosferic pressure |
| MichalKozlowski | 0:8fe9c25985e5 | 137 | HIT = 0x0A, // altitude |
| MichalKozlowski | 0:8fe9c25985e5 | 138 | ALHI = 0x0C, // upper limit treshold for alarm |
| MichalKozlowski | 0:8fe9c25985e5 | 139 | ALLO = 0x0D, // lower limit treshold for alarm |
| MichalKozlowski | 0:8fe9c25985e5 | 140 | FUNC = 0x0F, // PWM output |
| MichalKozlowski | 0:8fe9c25985e5 | 141 | ERR = 0x10 // Self-test |
| MichalKozlowski | 0:8fe9c25985e5 | 142 | }; |
| MichalKozlowski | 0:8fe9c25985e5 | 143 | |
| MichalKozlowski | 0:8fe9c25985e5 | 144 | /** Reg: CTL / Addr: 0x01 / Permission: RW / Bits:2-0 |
| MichalKozlowski | 0:8fe9c25985e5 | 145 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 146 | enum eControlMode { |
| MichalKozlowski | 0:8fe9c25985e5 | 147 | PWR_DOWN = 0x00, |
| MichalKozlowski | 0:8fe9c25985e5 | 148 | CONTIN = 0x06 |
| MichalKozlowski | 0:8fe9c25985e5 | 149 | }; |
| MichalKozlowski | 0:8fe9c25985e5 | 150 | |
| MichalKozlowski | 0:8fe9c25985e5 | 151 | /** Reg: FUNC / Addr: 0x0F / Permission: RW / Bits: 3, 2, 0 |
| MichalKozlowski | 0:8fe9c25985e5 | 152 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 153 | enum eFunctionSetting { |
| MichalKozlowski | 0:8fe9c25985e5 | 154 | PWME_ON = 1 << 0, |
| MichalKozlowski | 0:8fe9c25985e5 | 155 | PWME_OFF = 0 << 0, |
| MichalKozlowski | 0:8fe9c25985e5 | 156 | HPAE_ON = 1 << 2, |
| MichalKozlowski | 0:8fe9c25985e5 | 157 | HPAE_OFF = 0 << 2, |
| MichalKozlowski | 0:8fe9c25985e5 | 158 | PWMR_LOW = 1 << 3, |
| MichalKozlowski | 0:8fe9c25985e5 | 159 | PWMR_HIGH = 0 << 3 |
| MichalKozlowski | 0:8fe9c25985e5 | 160 | }; |
| MichalKozlowski | 0:8fe9c25985e5 | 161 | |
| MichalKozlowski | 0:8fe9c25985e5 | 162 | /** cdm7160 stuct prototype |
| MichalKozlowski | 0:8fe9c25985e5 | 163 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 164 | struct cdm7160_t { |
| MichalKozlowski | 0:8fe9c25985e5 | 165 | uint8_t addr; |
| MichalKozlowski | 0:8fe9c25985e5 | 166 | int co2; |
| MichalKozlowski | 0:8fe9c25985e5 | 167 | uint8_t control; |
| MichalKozlowski | 0:8fe9c25985e5 | 168 | uint8_t status; |
| MichalKozlowski | 0:8fe9c25985e5 | 169 | uint16_t highAlertLimit; |
| MichalKozlowski | 0:8fe9c25985e5 | 170 | uint16_t lowAlertLimit; |
| MichalKozlowski | 0:8fe9c25985e5 | 171 | uint16_t atmosferic_pressure; |
| MichalKozlowski | 0:8fe9c25985e5 | 172 | uint16_t altitude; |
| MichalKozlowski | 0:8fe9c25985e5 | 173 | uint8_t settings; |
| MichalKozlowski | 0:8fe9c25985e5 | 174 | uint8_t selfDiag; |
| MichalKozlowski | 0:8fe9c25985e5 | 175 | }; |
| MichalKozlowski | 0:8fe9c25985e5 | 176 | cdm7160_t cdm7160; |
| MichalKozlowski | 0:8fe9c25985e5 | 177 | |
| MichalKozlowski | 0:8fe9c25985e5 | 178 | /** Create an CDM7160 instance |
| MichalKozlowski | 0:8fe9c25985e5 | 179 | * which is connected to specified I2C pins with specified address |
| MichalKozlowski | 0:8fe9c25985e5 | 180 | * |
| MichalKozlowski | 0:8fe9c25985e5 | 181 | * @param sda I2C-bus SDA pin |
| MichalKozlowski | 0:8fe9c25985e5 | 182 | * @param scl I2C-bus SCL pin |
| MichalKozlowski | 0:8fe9c25985e5 | 183 | * @param addr (option) I2C-bus address (default: 0x4A) |
| MichalKozlowski | 0:8fe9c25985e5 | 184 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 185 | CDM7160(PinName sda, PinName scl, uint8_t addr = CDM7160_I2C_ADDR); |
| MichalKozlowski | 0:8fe9c25985e5 | 186 | |
| MichalKozlowski | 0:8fe9c25985e5 | 187 | /** Create a CDM7160 instance |
| MichalKozlowski | 0:8fe9c25985e5 | 188 | * which is connected to specified I2C pins with specified address |
| MichalKozlowski | 0:8fe9c25985e5 | 189 | * |
| MichalKozlowski | 0:8fe9c25985e5 | 190 | * @param i2c_obj I2C object (instance) |
| MichalKozlowski | 0:8fe9c25985e5 | 191 | * @param addr (option) I2C-bus address (default: 0x4A) |
| MichalKozlowski | 0:8fe9c25985e5 | 192 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 193 | /** Constructor of CDM7160 |
| MichalKozlowski | 0:8fe9c25985e5 | 194 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 195 | CDM7160(I2C &i2c_obj, uint8_t addr = CDM7160_I2C_ADDR); |
| MichalKozlowski | 0:8fe9c25985e5 | 196 | |
| MichalKozlowski | 0:8fe9c25985e5 | 197 | /** Destructor of CDM7160 |
| MichalKozlowski | 0:8fe9c25985e5 | 198 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 199 | ~CDM7160(); |
| MichalKozlowski | 0:8fe9c25985e5 | 200 | |
| MichalKozlowski | 0:8fe9c25985e5 | 201 | |
| MichalKozlowski | 0:8fe9c25985e5 | 202 | /** Initialize the CDM7160 |
| MichalKozlowski | 0:8fe9c25985e5 | 203 | * Calling function control() and set sensor in continuous mode |
| MichalKozlowski | 0:8fe9c25985e5 | 204 | * @return CDM7160 address if successful. CDM7160_ERROR if fail |
| MichalKozlowski | 0:8fe9c25985e5 | 205 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 206 | int8_t init(); |
| MichalKozlowski | 0:8fe9c25985e5 | 207 | |
| MichalKozlowski | 1:4a0a9c03afba | 208 | /** Integrated Initialize the CDM7160 sensor |
| MichalKozlowski | 1:4a0a9c03afba | 209 | * By default: set Atmospheric pressure and altitude, set sensor in countinous mode, |
| MichalKozlowski | 1:4a0a9c03afba | 210 | * enable atm. pressure and altitude correction in measurement and |
| MichalKozlowski | 1:4a0a9c03afba | 211 | * disable PWM output PIN |
| MichalKozlowski | 1:4a0a9c03afba | 212 | * @return CDM7160 address if successful. CDM7160_ERROR if fail |
| MichalKozlowski | 1:4a0a9c03afba | 213 | */ |
| MichalKozlowski | 1:4a0a9c03afba | 214 | int8_t initIntegrated( uint16_t hpa = 1005, uint16_t height = 130, |
| MichalKozlowski | 1:4a0a9c03afba | 215 | eControlMode mode = CONTIN, |
| MichalKozlowski | 2:207717b5eaee | 216 | eFunctionSetting atm_alt_correct= HPAE_ON, |
| MichalKozlowski | 1:4a0a9c03afba | 217 | eFunctionSetting pwm_conce = PWMR_LOW, |
| MichalKozlowski | 1:4a0a9c03afba | 218 | eFunctionSetting pwm_pin = PWME_OFF); |
| MichalKozlowski | 1:4a0a9c03afba | 219 | |
| MichalKozlowski | 0:8fe9c25985e5 | 220 | /** Measure CO2 in ppm |
| MichalKozlowski | 0:8fe9c25985e5 | 221 | * Measurement is stored in struct variable: int co2 |
| MichalKozlowski | 0:8fe9c25985e5 | 222 | * @return co2 if sucessful. CDM7160_ERROR if fail |
| MichalKozlowski | 0:8fe9c25985e5 | 223 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 224 | int getCO2(); |
| MichalKozlowski | 0:8fe9c25985e5 | 225 | |
| MichalKozlowski | 0:8fe9c25985e5 | 226 | |
| MichalKozlowski | 0:8fe9c25985e5 | 227 | /** Periodic Measurement mode of the CDM7160 |
| MichalKozlowski | 0:8fe9c25985e5 | 228 | * CDM7160 goes into idle state |
| MichalKozlowski | 0:8fe9c25985e5 | 229 | * @param mode - operation mode (Power down or continuous) |
| MichalKozlowski | 0:8fe9c25985e5 | 230 | * @return CDM7160_SUCCESS if successful. CDM7160_ERROR if fail |
| MichalKozlowski | 0:8fe9c25985e5 | 231 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 232 | int8_t control(eControlMode mode = CONTIN); |
| MichalKozlowski | 0:8fe9c25985e5 | 233 | |
| MichalKozlowski | 0:8fe9c25985e5 | 234 | /** Soft reset command |
| MichalKozlowski | 0:8fe9c25985e5 | 235 | * soft reset for CDM7160 sensor |
| MichalKozlowski | 0:8fe9c25985e5 | 236 | * @return CDM7160_SUCCESS if successful. CDM7160_ERROR if fail |
| MichalKozlowski | 0:8fe9c25985e5 | 237 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 238 | int8_t softReset(); |
| MichalKozlowski | 0:8fe9c25985e5 | 239 | |
| MichalKozlowski | 0:8fe9c25985e5 | 240 | /** Read Status Register |
| MichalKozlowski | 0:8fe9c25985e5 | 241 | * status information of busy, alarm, connection on CAD0 and MSEL |
| MichalKozlowski | 0:8fe9c25985e5 | 242 | * Data stored in variable: uint8_t status |
| MichalKozlowski | 0:8fe9c25985e5 | 243 | * @return CDM7160_SUCCESS if successful. CDM7160_ERROR if fail |
| MichalKozlowski | 0:8fe9c25985e5 | 244 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 245 | int8_t getStatus(); |
| MichalKozlowski | 0:8fe9c25985e5 | 246 | |
| MichalKozlowski | 0:8fe9c25985e5 | 247 | /** Set Alert High and Low Limit |
| MichalKozlowski | 0:8fe9c25985e5 | 248 | * @param high_limit - high limit value |
| MichalKozlowski | 0:8fe9c25985e5 | 249 | * @param low_limit - low limit value |
| MichalKozlowski | 0:8fe9c25985e5 | 250 | * @return CDM7160_SUCCESS if successful. CDM7160_ERROR if fail |
| MichalKozlowski | 0:8fe9c25985e5 | 251 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 252 | int8_t setAlarmLimits(uint16_t high_limit = 1000, uint16_t low_limit = 400); |
| MichalKozlowski | 0:8fe9c25985e5 | 253 | |
| MichalKozlowski | 0:8fe9c25985e5 | 254 | /** Read Alert High and Low Limit |
| MichalKozlowski | 0:8fe9c25985e5 | 255 | * Data stored in variable: uint16_t highAlertLimit, uint16_t lowAlertLimit |
| MichalKozlowski | 0:8fe9c25985e5 | 256 | * @return CDM7160_SUCCESS if successful. CDM7160_ERROR if fail |
| MichalKozlowski | 0:8fe9c25985e5 | 257 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 258 | int8_t getAlarmLimits(); |
| MichalKozlowski | 0:8fe9c25985e5 | 259 | |
| MichalKozlowski | 0:8fe9c25985e5 | 260 | /** Set Atmospheric Pressure and Altitude - to correct calculation CO2 |
| MichalKozlowski | 0:8fe9c25985e5 | 261 | * @param hpa - atmospheric pressure value in [hPa] |
| MichalKozlowski | 0:8fe9c25985e5 | 262 | * @param height - altitude value in [m] |
| MichalKozlowski | 0:8fe9c25985e5 | 263 | * @return CDM7160_SUCCESS if successful. CDM7160_ERROR if fail |
| MichalKozlowski | 0:8fe9c25985e5 | 264 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 265 | int8_t setAirPressureAndAltitude(uint16_t hpa = 1005, uint16_t height = 130); |
| MichalKozlowski | 0:8fe9c25985e5 | 266 | |
| MichalKozlowski | 0:8fe9c25985e5 | 267 | /** Read Atmospheric Pressure and Altitude - correction value calculation CO2 |
| MichalKozlowski | 0:8fe9c25985e5 | 268 | * Data stored in variable: uint16_t atmosferic_pressure, uint16_t altitude |
| MichalKozlowski | 0:8fe9c25985e5 | 269 | * @return CDM7160_SUCCESS if successful. CDM7160_ERROR if fail |
| MichalKozlowski | 0:8fe9c25985e5 | 270 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 271 | int8_t getAirPressureAndAltitude(); |
| MichalKozlowski | 0:8fe9c25985e5 | 272 | |
| MichalKozlowski | 0:8fe9c25985e5 | 273 | /** Read Setting Register |
| MichalKozlowski | 0:8fe9c25985e5 | 274 | * settings information of PWM pin enable/disable, concentration range and |
| MichalKozlowski | 0:8fe9c25985e5 | 275 | * atmospheric pressure and altitude correction enable/disable |
| MichalKozlowski | 0:8fe9c25985e5 | 276 | * Data stored in variable: uint8_t settings |
| MichalKozlowski | 0:8fe9c25985e5 | 277 | * @return CDM7160_SUCCESS if successful. CDM7160_ERROR if fail |
| MichalKozlowski | 0:8fe9c25985e5 | 278 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 279 | int8_t getSettings(); |
| MichalKozlowski | 0:8fe9c25985e5 | 280 | |
| MichalKozlowski | 0:8fe9c25985e5 | 281 | /** Set Atmospheric Pressure and Altitude - to correct calculation CO2 |
| MichalKozlowski | 0:8fe9c25985e5 | 282 | * @param atm_alt_correct - atm. pressure and altitude correction Enable/Disable |
| MichalKozlowski | 0:8fe9c25985e5 | 283 | * @param pwm_conce - PWM output contrntration High/Low |
| MichalKozlowski | 0:8fe9c25985e5 | 284 | * @param pwm_pin - PWM pin enable/disable |
| MichalKozlowski | 0:8fe9c25985e5 | 285 | * @return CDM7160_SUCCESS if successful. CDM7160_ERROR if fail |
| MichalKozlowski | 0:8fe9c25985e5 | 286 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 287 | int8_t setSettings(eFunctionSetting atm_alt_correct= HPAE_OFF, |
| MichalKozlowski | 0:8fe9c25985e5 | 288 | eFunctionSetting pwm_conce = PWMR_LOW, |
| MichalKozlowski | 0:8fe9c25985e5 | 289 | eFunctionSetting pwm_pin = PWME_OFF); |
| MichalKozlowski | 0:8fe9c25985e5 | 290 | |
| MichalKozlowski | 0:8fe9c25985e5 | 291 | /** Self-test - diagnosis errors |
| MichalKozlowski | 0:8fe9c25985e5 | 292 | * Data stored in variable: uint8_t selfDiag |
| MichalKozlowski | 0:8fe9c25985e5 | 293 | * @return CDM7160 address if successful. CDM7160_ERROR if fail |
| MichalKozlowski | 0:8fe9c25985e5 | 294 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 295 | int8_t selfDiagnosis(); |
| MichalKozlowski | 0:8fe9c25985e5 | 296 | |
| MichalKozlowski | 0:8fe9c25985e5 | 297 | private: |
| MichalKozlowski | 0:8fe9c25985e5 | 298 | |
| MichalKozlowski | 0:8fe9c25985e5 | 299 | /** |
| MichalKozlowski | 0:8fe9c25985e5 | 300 | * Pointers to classes. |
| MichalKozlowski | 0:8fe9c25985e5 | 301 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 302 | I2C *pI2C; |
| MichalKozlowski | 0:8fe9c25985e5 | 303 | |
| MichalKozlowski | 0:8fe9c25985e5 | 304 | /** |
| MichalKozlowski | 0:8fe9c25985e5 | 305 | * References to classes. |
| MichalKozlowski | 0:8fe9c25985e5 | 306 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 307 | I2C &_I2C; |
| MichalKozlowski | 0:8fe9c25985e5 | 308 | |
| MichalKozlowski | 0:8fe9c25985e5 | 309 | /* |
| MichalKozlowski | 0:8fe9c25985e5 | 310 | * ----- PRIVATE I2C FUNCTIONS ----- |
| MichalKozlowski | 0:8fe9c25985e5 | 311 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 312 | |
| MichalKozlowski | 0:8fe9c25985e5 | 313 | /** I2C read function. |
| MichalKozlowski | 0:8fe9c25985e5 | 314 | * @param data[] Data array to read from I2C |
| MichalKozlowski | 0:8fe9c25985e5 | 315 | * @param len Data length to read |
| MichalKozlowski | 0:8fe9c25985e5 | 316 | * @return Read status - 0 on success, non-0 on failure. |
| MichalKozlowski | 0:8fe9c25985e5 | 317 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 318 | int8_t read(char data[], uint8_t len); |
| MichalKozlowski | 0:8fe9c25985e5 | 319 | |
| MichalKozlowski | 0:8fe9c25985e5 | 320 | /** |
| MichalKozlowski | 0:8fe9c25985e5 | 321 | * Write I2C register. |
| MichalKozlowski | 0:8fe9c25985e5 | 322 | * @param reg Register (1-Byte) to write |
| MichalKozlowski | 0:8fe9c25985e5 | 323 | * @returns Write status - 0 on success, non-0 on failure. |
| MichalKozlowski | 0:8fe9c25985e5 | 324 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 325 | int8_t write(uint8_t reg); |
| MichalKozlowski | 0:8fe9c25985e5 | 326 | |
| MichalKozlowski | 0:8fe9c25985e5 | 327 | /** I2C write function. |
| MichalKozlowski | 0:8fe9c25985e5 | 328 | * @param reg Register (1-Byte) to Write |
| MichalKozlowski | 0:8fe9c25985e5 | 329 | * @param data[] Data array to write |
| MichalKozlowski | 0:8fe9c25985e5 | 330 | * @param len Data length to write |
| MichalKozlowski | 0:8fe9c25985e5 | 331 | * @return Write status - 0 on success, non-0 on failure. |
| MichalKozlowski | 0:8fe9c25985e5 | 332 | */ |
| MichalKozlowski | 0:8fe9c25985e5 | 333 | int8_t write(uint8_t reg, char data[], uint8_t len); |
| MichalKozlowski | 0:8fe9c25985e5 | 334 | |
| MichalKozlowski | 0:8fe9c25985e5 | 335 | |
| MichalKozlowski | 0:8fe9c25985e5 | 336 | }; |
| MichalKozlowski | 0:8fe9c25985e5 | 337 | #endif // CDM7160_H |