Code example using the Sensirion SCD30 CO2 sensor module

Dependencies:   mbed scd30

Committer:
loopsva
Date:
Mon Sep 10 18:13:03 2018 +0000
Revision:
0:e4e96ef907b2
Child:
1:07dbea660864
Example code using the SCD30 CO2 sensor module

Who changed what in which revision?

UserRevisionLine numberNew contents of line
loopsva 0:e4e96ef907b2 1 #include "mbed.h"
loopsva 0:e4e96ef907b2 2 #include "scd30.h"
loopsva 0:e4e96ef907b2 3
loopsva 0:e4e96ef907b2 4 #define SDA0 D14 //PTE25
loopsva 0:e4e96ef907b2 5 #define SCL0 D15 //PTE24
loopsva 0:e4e96ef907b2 6 #define LEDON 0
loopsva 0:e4e96ef907b2 7 #define LEDOFF 1
loopsva 0:e4e96ef907b2 8
loopsva 0:e4e96ef907b2 9 DigitalOut rled(LED_RED);
loopsva 0:e4e96ef907b2 10 DigitalOut gled(LED_GREEN); //also PTE26 (J2-1)
loopsva 0:e4e96ef907b2 11 DigitalOut bled(LED_BLUE);
loopsva 0:e4e96ef907b2 12
loopsva 0:e4e96ef907b2 13 RawSerial pc(USBTX, USBRX);
loopsva 0:e4e96ef907b2 14
loopsva 0:e4e96ef907b2 15 scd30 scd(SDA0, SCL0, 400000); //Microchip real time clock
loopsva 0:e4e96ef907b2 16 scd30::SCD30_str scdSTR = {};
loopsva 0:e4e96ef907b2 17
loopsva 0:e4e96ef907b2 18 //-----------------------------------------------------------------------------
loopsva 0:e4e96ef907b2 19 // initial splash display
loopsva 0:e4e96ef907b2 20
loopsva 0:e4e96ef907b2 21 void initSplash() {
loopsva 0:e4e96ef907b2 22 pc.printf("\r\n\r\n");
loopsva 0:e4e96ef907b2 23 pc.printf("-----------------------------------------------------------------------------\r\n");
loopsva 0:e4e96ef907b2 24 }
loopsva 0:e4e96ef907b2 25
loopsva 0:e4e96ef907b2 26 //-----------------------------------------------------------------------------
loopsva 0:e4e96ef907b2 27 // initial the scd30
loopsva 0:e4e96ef907b2 28
loopsva 0:e4e96ef907b2 29 void initSCD30() {
loopsva 0:e4e96ef907b2 30 pc.printf("Initializing SCD30...\r\n");
loopsva 0:e4e96ef907b2 31 scd.softReset();
loopsva 0:e4e96ef907b2 32 wait_ms(2000);
loopsva 0:e4e96ef907b2 33 scd.getSerialNumber(scdSTR);
loopsva 0:e4e96ef907b2 34 pc.printf(" - SCD30 s/n: ");
loopsva 0:e4e96ef907b2 35 for(int i = 0; i < sizeof(scdSTR.sn); i++) pc.printf("%c", scdSTR.sn[i]);
loopsva 0:e4e96ef907b2 36 pc.printf("\r\n");
loopsva 0:e4e96ef907b2 37
loopsva 0:e4e96ef907b2 38 scd.setMeasInterval(5);
loopsva 0:e4e96ef907b2 39 scd.startMeasurement(0);
loopsva 0:e4e96ef907b2 40 }
loopsva 0:e4e96ef907b2 41
loopsva 0:e4e96ef907b2 42 //-----------------------------------------------------------------------------
loopsva 0:e4e96ef907b2 43 //-----------------------------------------------------------------------------
loopsva 0:e4e96ef907b2 44
loopsva 0:e4e96ef907b2 45 int main()
loopsva 0:e4e96ef907b2 46 {
loopsva 0:e4e96ef907b2 47 rled = gled = bled = LEDOFF;
loopsva 0:e4e96ef907b2 48 pc.baud(230400);
loopsva 0:e4e96ef907b2 49 wait_ms(200);
loopsva 0:e4e96ef907b2 50 initSplash();
loopsva 0:e4e96ef907b2 51
loopsva 0:e4e96ef907b2 52 initSCD30();
loopsva 0:e4e96ef907b2 53 int count = 0;
loopsva 0:e4e96ef907b2 54
loopsva 0:e4e96ef907b2 55 pc.printf("Ready...\r\n");
loopsva 0:e4e96ef907b2 56 while(1) {
loopsva 0:e4e96ef907b2 57 gled = !gled;
loopsva 0:e4e96ef907b2 58 wait_ms(250);
loopsva 0:e4e96ef907b2 59 scd.getReadyStatus(scdSTR);
loopsva 0:e4e96ef907b2 60 uint16_t redy = scdSTR.ready;
loopsva 0:e4e96ef907b2 61 if(redy == scd30::SCDisReady) {
loopsva 0:e4e96ef907b2 62 uint8_t crcc = scd.readMeasurement(scdSTR);
loopsva 0:e4e96ef907b2 63 count++;
loopsva 0:e4e96ef907b2 64 if(crcc != scd30::SCDnoERROR) pc.printf("ERROR: %d\r\n", crcc);
loopsva 0:e4e96ef907b2 65 else pc.printf("%5d -> CO2: %9.3f Temp: %7.3f Hum: %5.2f\r\n",
loopsva 0:e4e96ef907b2 66 count, scdSTR.co2f, scdSTR.tempf, scdSTR.humf);
loopsva 0:e4e96ef907b2 67 if((int)scdSTR.co2f > 10000) initSCD30();
loopsva 0:e4e96ef907b2 68 }
loopsva 0:e4e96ef907b2 69 }
loopsva 0:e4e96ef907b2 70 }