Test program for SPS30

Dependencies:   SPS30-sensor

main.cpp

Committer:
ziqiyap
Date:
2019-03-04
Revision:
2:225c3f2a2a8a
Parent:
1:6a9693f310f7
Child:
3:572adaa86366

File content as of revision 2:225c3f2a2a8a:

#include <string>
#include "mbed.h"
#include "sps30.h"

#define SDA0                    D14 //PTE25
#define SCL0                    D15 //PTE24
#define LEDON                   0
#define LEDOFF                  1

using namespace std;

Serial pc(SERIAL_TX, SERIAL_RX);

sps30 sps(SDA0, SCL0, 100000);                 //Microchip real time clock (set as 400kHz)
DigitalOut myled(LED1);

//-----------------------------------------------------------------------------
// initial splash display

void initSplash() {
    pc.printf("\r\n\r\n");
    pc.printf("-----------------------------------------------------------------------------\r\n");
}

//-----------------------------------------------------------------------------
// initial the scd30

void initSPS30() {
    pc.printf("Initializing SPS30...\r\n");
    uint8_t dbg = sps.softReset();
    if (dbg != sps30::SPSnoERROR) pc.printf("No ack \r\n");
    wait_ms(2000);
    sps.getSerialNumber();
    pc.printf(" - SPS30 s/n ascii: ");
    for(int i = 0; i < sizeof(sps.sn); i++) 
    {
        pc.printf("%c", sps.sn[i]);
    }
    pc.printf("\r\n");
    sps.getArticleCode();
    pc.printf(" - SPS30 article code ascii: ");
    for(int i = 0; i < sizeof(sps.acode); i++) 
    {
        pc.printf("%c", sps.acode[i]);
    }
    
    pc.printf("\r\n");
    sps.startMeasurement();
}

//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------



int main()
{
    myled = LEDOFF;
    pc.baud(9600);
    wait_ms(200);
    initSplash();
    
    initSPS30();
    
    int count = 0;
//    string mass_1p0, mass_2p5, mass_4p0, mass_10p0, num_0p5, num_1p0, num_2p5, num_4p0, num_10p0, typ_pm_size;
    pc.printf("Ready...\r\n");
    while(1)
    {
        myled = !myled;
        wait_ms(250);
        sps.getReadyStatus();
        uint16_t redy = sps.ready;
        if(redy == sps30::SPSisReady) {
            uint8_t crcc = sps.readMeasurement();
            count++;
            if(crcc != sps30::SPSnoERROR) pc.printf("ERROR: %d\r\n", crcc);
            else pc.printf("%5d  -> MASS CONCENTRATION (ug/m3) \r\n "
                            "PM1.0: %7.3f   PM2.5: %7.3f   PM4.0: %7.3f   PM10.0: %7.3f\r\n "
                            "NUMBER CONCENTRATION (#/cm3) \r\n "
                            "PM0.5: %7.3f   PM1.0: %7.3f   PM2.5: %7.3f   PM4.0: %7.3f   PM10.0:  %7.3f \r\n "
                            "Typical Particle Size (um): %7.3f \r\n",  
                            count, sps.mass_1p0_f, sps.mass_2p5_f, sps.mass_4p0_f, sps.mass_10p0_f, sps.num_0p5_f, \
                            sps.num_1p0_f, sps.num_2p5_f, sps.num_4p0_f, sps.num_10p0_f, sps.typ_pm_size_f);
        }
        wait(5);
        count++;
    }
}