Code example using the Sensirion SCD30 CO2 sensor module

Dependencies:   mbed scd30

Committer:
loopsva
Date:
Thu Sep 13 17:43:17 2018 +0000
Revision:
1:07dbea660864
Parent:
0:e4e96ef907b2
Changed the way the data structure was handled in the SCD30

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
loopsva 0:e4e96ef907b2 17 //-----------------------------------------------------------------------------
loopsva 0:e4e96ef907b2 18 // initial splash display
loopsva 0:e4e96ef907b2 19
loopsva 0:e4e96ef907b2 20 void initSplash() {
loopsva 0:e4e96ef907b2 21 pc.printf("\r\n\r\n");
loopsva 0:e4e96ef907b2 22 pc.printf("-----------------------------------------------------------------------------\r\n");
loopsva 0:e4e96ef907b2 23 }
loopsva 0:e4e96ef907b2 24
loopsva 0:e4e96ef907b2 25 //-----------------------------------------------------------------------------
loopsva 0:e4e96ef907b2 26 // initial the scd30
loopsva 0:e4e96ef907b2 27
loopsva 0:e4e96ef907b2 28 void initSCD30() {
loopsva 0:e4e96ef907b2 29 pc.printf("Initializing SCD30...\r\n");
loopsva 0:e4e96ef907b2 30 scd.softReset();
loopsva 0:e4e96ef907b2 31 wait_ms(2000);
loopsva 1:07dbea660864 32 scd.getSerialNumber();
loopsva 0:e4e96ef907b2 33 pc.printf(" - SCD30 s/n: ");
loopsva 1:07dbea660864 34 for(int i = 0; i < sizeof(scd.scdSTR.sn); i++) pc.printf("%c", scd.scdSTR.sn[i]);
loopsva 0:e4e96ef907b2 35 pc.printf("\r\n");
loopsva 0:e4e96ef907b2 36
loopsva 0:e4e96ef907b2 37 scd.setMeasInterval(5);
loopsva 0:e4e96ef907b2 38 scd.startMeasurement(0);
loopsva 0:e4e96ef907b2 39 }
loopsva 0:e4e96ef907b2 40
loopsva 0:e4e96ef907b2 41 //-----------------------------------------------------------------------------
loopsva 0:e4e96ef907b2 42 //-----------------------------------------------------------------------------
loopsva 0:e4e96ef907b2 43
loopsva 0:e4e96ef907b2 44 int main()
loopsva 0:e4e96ef907b2 45 {
loopsva 0:e4e96ef907b2 46 rled = gled = bled = LEDOFF;
loopsva 0:e4e96ef907b2 47 pc.baud(230400);
loopsva 0:e4e96ef907b2 48 wait_ms(200);
loopsva 0:e4e96ef907b2 49 initSplash();
loopsva 0:e4e96ef907b2 50
loopsva 0:e4e96ef907b2 51 initSCD30();
loopsva 0:e4e96ef907b2 52 int count = 0;
loopsva 0:e4e96ef907b2 53
loopsva 0:e4e96ef907b2 54 pc.printf("Ready...\r\n");
loopsva 0:e4e96ef907b2 55 while(1) {
loopsva 0:e4e96ef907b2 56 gled = !gled;
loopsva 0:e4e96ef907b2 57 wait_ms(250);
loopsva 1:07dbea660864 58 scd.getReadyStatus();
loopsva 1:07dbea660864 59 uint16_t redy = scd.scdSTR.ready;
loopsva 0:e4e96ef907b2 60 if(redy == scd30::SCDisReady) {
loopsva 1:07dbea660864 61 uint8_t crcc = scd.readMeasurement();
loopsva 0:e4e96ef907b2 62 count++;
loopsva 0:e4e96ef907b2 63 if(crcc != scd30::SCDnoERROR) pc.printf("ERROR: %d\r\n", crcc);
loopsva 0:e4e96ef907b2 64 else pc.printf("%5d -> CO2: %9.3f Temp: %7.3f Hum: %5.2f\r\n",
loopsva 1:07dbea660864 65 count, scd.scdSTR.co2f, scd.scdSTR.tempf, scd.scdSTR.humf);
loopsva 1:07dbea660864 66 if((int)scd.scdSTR.co2f > 10000) initSCD30();
loopsva 0:e4e96ef907b2 67 }
loopsva 0:e4e96ef907b2 68 }
loopsva 0:e4e96ef907b2 69 }