aboutsummaryrefslogtreecommitdiff
path: root/main.ino
diff options
context:
space:
mode:
Diffstat (limited to 'main.ino')
-rw-r--r--main.ino94
1 files changed, 94 insertions, 0 deletions
diff --git a/main.ino b/main.ino
new file mode 100644
index 0000000..bc27deb
--- /dev/null
+++ b/main.ino
@@ -0,0 +1,94 @@
+#include <Arduino.h>
+#include <SensirionI2CScd4x.h>
+#include <Wire.h>
+
+SensirionI2CScd4x scd4x;
+
+void printUint16Hex(uint16_t value) {
+ Serial.print(value < 4096 ? "0" : "");
+ Serial.print(value < 256 ? "0" : "");
+ Serial.print(value < 16 ? "0" : "");
+ Serial.print(value, HEX);
+}
+
+void printSerialNumber(uint16_t serial0, uint16_t serial1, uint16_t serial2) {
+ Serial.print("Serial: 0x");
+ printUint16Hex(serial0);
+ printUint16Hex(serial1);
+ printUint16Hex(serial2);
+ Serial.println();
+}
+
+void setup() {
+
+ Serial.begin(115200);
+ while (!Serial) {
+ delay(100);
+ }
+
+ Wire.begin(21,22);
+
+ uint16_t error;
+ char errorMessage[256];
+
+ scd4x.begin(Wire);
+
+ // stop potentially previously started measurement
+ error = scd4x.stopPeriodicMeasurement();
+ if (error) {
+ Serial.print("Error trying to execute stopPeriodicMeasurement(): ");
+ errorToString(error, errorMessage, 256);
+ Serial.println(errorMessage);
+ }
+
+ uint16_t serial0;
+ uint16_t serial1;
+ uint16_t serial2;
+ error = scd4x.getSerialNumber(serial0, serial1, serial2);
+ if (error) {
+ Serial.print("Error trying to execute getSerialNumber(): ");
+ errorToString(error, errorMessage, 256);
+ Serial.println(errorMessage);
+ } else {
+ printSerialNumber(serial0, serial1, serial2);
+ }
+
+ // Start Measurement
+ error = scd4x.startPeriodicMeasurement();
+ if (error) {
+ Serial.print("Error trying to execute startPeriodicMeasurement(): ");
+ errorToString(error, errorMessage, 256);
+ Serial.println(errorMessage);
+ }
+
+ Serial.println("Waiting for first measurement... (5 sec)");
+}
+
+void loop() {
+ uint16_t error;
+ char errorMessage[256];
+
+ delay(5000);
+
+ // Read Measurement
+ uint16_t co2 = 0;
+ float temperature = 0.0f;
+ float humidity = 0.0f;
+ error = scd4x.readMeasurement(co2, temperature, humidity);
+ if (error) {
+ Serial.print("Error trying to execute readMeasurement(): ");
+ errorToString(error, errorMessage, 256);
+ Serial.println(errorMessage);
+ } else if (co2 == 0) {
+ Serial.println("Invalid sample detected, skipping.");
+ } else {
+ Serial.print("Co2:");
+ Serial.print(co2);
+ Serial.print("\t");
+ Serial.print("Temperature:");
+ Serial.print(temperature);
+ Serial.print("\t");
+ Serial.print("Humidity:");
+ Serial.println(humidity);
+ }
+}