Kevin Braun
/
scd30_HelloWorld
Code example using the Sensirion SCD30 CO2 sensor module
main.cpp@0:e4e96ef907b2, 2018-09-10 (annotated)
- 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?
User | Revision | Line number | New 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 | } |