/* * I2C-Generator: 0.3.0 * Yaml Version: 0.1.0 * Template Version: 0.7.0-62-g3d691f9 */ /* * Copyright (c) 2021, Sensirion AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * * Neither the name of Sensirion AG nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include #include #include SensirionI2CSgp41 sgp41; // time in seconds needed for NOx conditioning uint16_t conditioning_s = 10; void setup() { Serial.begin(115200); while (!Serial) { delay(100); } Wire.begin(); uint16_t error; char errorMessage[256]; sgp41.begin(Wire); uint16_t serialNumber[3]; uint8_t serialNumberSize = 3; error = sgp41.getSerialNumber(serialNumber, serialNumberSize); if (error) { Serial.print("Error trying to execute getSerialNumber(): "); errorToString(error, errorMessage, 256); Serial.println(errorMessage); } else { Serial.print("SerialNumber:"); Serial.print("0x"); for (size_t i = 0; i < serialNumberSize; i++) { uint16_t value = serialNumber[i]; Serial.print(value < 4096 ? "0" : ""); Serial.print(value < 256 ? "0" : ""); Serial.print(value < 16 ? "0" : ""); Serial.print(value, HEX); } Serial.println(); } uint16_t testResult; error = sgp41.executeSelfTest(testResult); if (error) { Serial.print("Error trying to execute executeSelfTest(): "); errorToString(error, errorMessage, 256); Serial.println(errorMessage); } else if (testResult != 0xD400) { Serial.print("executeSelfTest failed with error: "); Serial.println(testResult); } } void loop() { uint16_t error; char errorMessage[256]; uint16_t defaultRh = 0x8000; uint16_t defaultT = 0x6666; uint16_t srawVoc = 0; uint16_t srawNox = 0; delay(1000); if (conditioning_s > 0) { // During NOx conditioning (10s) SRAW NOx will remain 0 error = sgp41.executeConditioning(defaultRh, defaultT, srawVoc); conditioning_s--; } else { // Read Measurement error = sgp41.measureRawSignals(defaultRh, defaultT, srawVoc, srawNox); } if (error) { Serial.print("Error trying to execute measureRawSignals(): "); errorToString(error, errorMessage, 256); Serial.println(errorMessage); } else { Serial.print("SRAW_VOC:"); Serial.print(srawVoc); Serial.print("\t"); Serial.print("SRAW_NOx:"); Serial.println(srawNox); } }