/* Signal Compensation By: Paul Clark Based on earlier code by: Nathan Seidle SparkFun Electronics Date: June 3rd, 2021 License: MIT. See license file for more information but you can basically do whatever you want with this code. Feel like supporting open source hardware? Buy a board from SparkFun! https://www.sparkfun.com/products/18365 This example prints the current CO2 level, relative humidity, and temperature in C. Hardware Connections: Attach RedBoard to computer using a USB cable. Connect SCD40/41 to RedBoard using Qwiic cable. Open Serial Monitor at 115200 baud. */ #include #include "SparkFun_SCD4x_Arduino_Library.h" //Click here to get the library: http://librarymanager/All#SparkFun_SCD4x SCD4x mySensor; void setup() { Serial.begin(115200); Serial.println(F("SCD4x Example")); Wire.begin(); //mySensor.enableDebugging(); // Uncomment this line to get helpful debug messages on Serial if (mySensor.begin() == false) { Serial.println(F("Sensor not detected. Please check wiring. Freezing...")); while (1) ; } //We need to stop periodic measurements before we can change the sensor signal compensation settings if (mySensor.stopPeriodicMeasurement() == true) { Serial.println(F("Periodic measurement is disabled!")); } //Now we can change the sensor settings. //There are three signal compensation commands we can use: setTemperatureOffset; setSensorAltitude; and setAmbientPressure Serial.print(F("Temperature offset is currently: ")); Serial.println(mySensor.getTemperatureOffset(), 2); // Print the temperature offset with two decimal places mySensor.setTemperatureOffset(5); // Set the temperature offset to 5C Serial.print(F("Temperature offset is now: ")); Serial.println(mySensor.getTemperatureOffset(), 2); // Print the temperature offset with two decimal places Serial.print(F("Sensor altitude is currently: ")); Serial.println(mySensor.getSensorAltitude()); // Print the sensor altitude mySensor.setSensorAltitude(1000); // Set the sensor altitude to 1000m Serial.print(F("Sensor altitude is now: ")); Serial.println(mySensor.getSensorAltitude()); // Print the sensor altitude //There is no getAmbientPressure command bool success = mySensor.setAmbientPressure(98700); // Set the ambient pressure to 98700 Pascals if (success) { Serial.println(F("setAmbientPressure was successful")); } //The signal compensation settings are stored in RAM by default and will reset if reInit is called //or if the power is cycled. To store the settings in EEPROM we can call: mySensor.persistSettings(); // Uncomment this line to store the sensor settings in EEPROM //Just for giggles, while the periodic measurements are stopped, let's read the sensor serial number char serialNumber[13]; // The serial number is 48-bits. We need 12 bytes plus one extra to store it as ASCII Hex if (mySensor.getSerialNumber(serialNumber) == true) { Serial.print(F("The sensor's serial number is: 0x")); Serial.println(serialNumber); } //Finally, we need to restart periodic measurements if (mySensor.startPeriodicMeasurement() == true) { Serial.println(F("Periodic measurements restarted!")); } } void loop() { if (mySensor.readMeasurement()) // readMeasurement will return true when fresh data is available { Serial.println(); Serial.print(F("CO2(ppm):")); Serial.print(mySensor.getCO2()); Serial.print(F("\tTemperature(C):")); Serial.print(mySensor.getTemperature(), 1); Serial.print(F("\tHumidity(%RH):")); Serial.print(mySensor.getHumidity(), 1); Serial.println(); } else Serial.print(F(".")); delay(500); }