Kevin Braun
/
scd30_HelloWorld
Code example using the Sensirion SCD30 CO2 sensor module
main.cpp@1:07dbea660864, 2018-09-13 (annotated)
- 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?
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 | |
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 | } |