Test program for SPS30

Dependencies:   SPS30-sensor

Committer:
ziqiyap
Date:
Wed Mar 27 06:08:17 2019 +0000
Revision:
4:91fa1c5ebbe1
Parent:
3:572adaa86366
working copy with sps30 lib integrated with sensordriver;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ziqiyap 0:732c556ef648 1 #include <string>
ziqiyap 0:732c556ef648 2 #include "mbed.h"
ziqiyap 2:225c3f2a2a8a 3 #include "sps30.h"
ziqiyap 2:225c3f2a2a8a 4
ziqiyap 2:225c3f2a2a8a 5 #define SDA0 D14 //PTE25
ziqiyap 2:225c3f2a2a8a 6 #define SCL0 D15 //PTE24
ziqiyap 2:225c3f2a2a8a 7 #define LEDON 0
ziqiyap 2:225c3f2a2a8a 8 #define LEDOFF 1
ziqiyap 0:732c556ef648 9
ziqiyap 0:732c556ef648 10 using namespace std;
ziqiyap 0:732c556ef648 11
ziqiyap 0:732c556ef648 12 Serial pc(SERIAL_TX, SERIAL_RX);
ziqiyap 0:732c556ef648 13
ziqiyap 4:91fa1c5ebbe1 14 //sps30 sps(SDA1, SCL1, 100000); //Microchip real time clock (set as 400kHz)
ziqiyap 2:225c3f2a2a8a 15 DigitalOut myled(LED1);
ziqiyap 2:225c3f2a2a8a 16
ziqiyap 2:225c3f2a2a8a 17 //-----------------------------------------------------------------------------
ziqiyap 2:225c3f2a2a8a 18 // initial splash display
ziqiyap 2:225c3f2a2a8a 19
ziqiyap 2:225c3f2a2a8a 20 void initSplash() {
ziqiyap 2:225c3f2a2a8a 21 pc.printf("\r\n\r\n");
ziqiyap 2:225c3f2a2a8a 22 pc.printf("-----------------------------------------------------------------------------\r\n");
ziqiyap 2:225c3f2a2a8a 23 }
ziqiyap 2:225c3f2a2a8a 24
ziqiyap 2:225c3f2a2a8a 25 //-----------------------------------------------------------------------------
ziqiyap 2:225c3f2a2a8a 26 // initial the scd30
ziqiyap 4:91fa1c5ebbe1 27 /*
ziqiyap 2:225c3f2a2a8a 28 void initSPS30() {
ziqiyap 2:225c3f2a2a8a 29 pc.printf("Initializing SPS30...\r\n");
ziqiyap 4:91fa1c5ebbe1 30 uint8_t dbg = sps.SoftReset();
ziqiyap 2:225c3f2a2a8a 31 if (dbg != sps30::SPSnoERROR) pc.printf("No ack \r\n");
ziqiyap 2:225c3f2a2a8a 32 wait_ms(2000);
ziqiyap 4:91fa1c5ebbe1 33 sps.GetSerialNumber();
ziqiyap 2:225c3f2a2a8a 34 pc.printf(" - SPS30 s/n ascii: ");
ziqiyap 2:225c3f2a2a8a 35 for(int i = 0; i < sizeof(sps.sn); i++)
ziqiyap 2:225c3f2a2a8a 36 {
ziqiyap 2:225c3f2a2a8a 37 pc.printf("%c", sps.sn[i]);
ziqiyap 2:225c3f2a2a8a 38 }
ziqiyap 2:225c3f2a2a8a 39 pc.printf("\r\n");
ziqiyap 4:91fa1c5ebbe1 40 sps.GetArticleCode();
ziqiyap 2:225c3f2a2a8a 41 pc.printf(" - SPS30 article code ascii: ");
ziqiyap 2:225c3f2a2a8a 42 for(int i = 0; i < sizeof(sps.acode); i++)
ziqiyap 2:225c3f2a2a8a 43 {
ziqiyap 4:91fa1c5ebbe1 44 pc.printf("%d", sps.acode[i]);
ziqiyap 2:225c3f2a2a8a 45 }
ziqiyap 4:91fa1c5ebbe1 46 pc.printf("\r\n");
ziqiyap 4:91fa1c5ebbe1 47 sps.SetAutoCleanInterval();
ziqiyap 4:91fa1c5ebbe1 48 pc.printf(" - SPS30 auto clean interval: %d", sps.clean_interval_i);
ziqiyap 2:225c3f2a2a8a 49 pc.printf("\r\n");
ziqiyap 4:91fa1c5ebbe1 50
ziqiyap 4:91fa1c5ebbe1 51 sps.StartMeasurement();
ziqiyap 4:91fa1c5ebbe1 52 // sps.startFanClean();
ziqiyap 4:91fa1c5ebbe1 53 // pc.printf(" - SPS30 start manual clean \r\n");
ziqiyap 4:91fa1c5ebbe1 54
ziqiyap 2:225c3f2a2a8a 55 }
ziqiyap 4:91fa1c5ebbe1 56 */
ziqiyap 2:225c3f2a2a8a 57 //-----------------------------------------------------------------------------
ziqiyap 2:225c3f2a2a8a 58 //-----------------------------------------------------------------------------
ziqiyap 2:225c3f2a2a8a 59
ziqiyap 2:225c3f2a2a8a 60
ziqiyap 2:225c3f2a2a8a 61
ziqiyap 0:732c556ef648 62 int main()
ziqiyap 0:732c556ef648 63 {
ziqiyap 2:225c3f2a2a8a 64 myled = LEDOFF;
ziqiyap 2:225c3f2a2a8a 65 pc.baud(9600);
ziqiyap 2:225c3f2a2a8a 66 wait_ms(200);
ziqiyap 2:225c3f2a2a8a 67 initSplash();
ziqiyap 4:91fa1c5ebbe1 68
ziqiyap 4:91fa1c5ebbe1 69 Sps30 sps(SDA2, SCL2, 100000);
ziqiyap 4:91fa1c5ebbe1 70 sps.InitSensor();
ziqiyap 4:91fa1c5ebbe1 71 wait(1);
ziqiyap 4:91fa1c5ebbe1 72 pc.printf("Serial Number: %s \r\n", sps.sensor_serial);
ziqiyap 2:225c3f2a2a8a 73
ziqiyap 0:732c556ef648 74 int count = 0;
ziqiyap 2:225c3f2a2a8a 75 pc.printf("Ready...\r\n");
ziqiyap 3:572adaa86366 76 pc.printf(" count | MASS CONCENTRATION (ug/m3) | NUMBER CONCENTRATION (#/cm3) | Typical Particle Size \r\n");
ziqiyap 3:572adaa86366 77 pc.printf(" | PM1.0 | PM2.5 | PM4.0 | PM10.0 | PM0.5 | PM1.0 | PM2.5 | PM4.0 | PM10.0 | (um) \r\n");
ziqiyap 3:572adaa86366 78 pc.printf("---------------------------------------------------------------------------------------------------------------------------\r\n");
ziqiyap 0:732c556ef648 79 while(1)
ziqiyap 0:732c556ef648 80 {
ziqiyap 2:225c3f2a2a8a 81 myled = !myled;
ziqiyap 2:225c3f2a2a8a 82 wait_ms(250);
ziqiyap 4:91fa1c5ebbe1 83 int ret = sps.PollSensor();
ziqiyap 4:91fa1c5ebbe1 84 if (ret == SensorDriver::SENSOR_DATAOK)
ziqiyap 4:91fa1c5ebbe1 85 {
ziqiyap 4:91fa1c5ebbe1 86 pc.printf(" %5d |", count);
ziqiyap 4:91fa1c5ebbe1 87 for (int i = 0; i < sps.sensor_data.size(); i++)
ziqiyap 4:91fa1c5ebbe1 88 {
ziqiyap 4:91fa1c5ebbe1 89 pc.printf(" %s |", sps.sensor_data[i].second);
ziqiyap 4:91fa1c5ebbe1 90 }
ziqiyap 4:91fa1c5ebbe1 91 pc.printf("\r\n");
ziqiyap 4:91fa1c5ebbe1 92 count++;
ziqiyap 4:91fa1c5ebbe1 93 }
ziqiyap 4:91fa1c5ebbe1 94
ziqiyap 4:91fa1c5ebbe1 95 /*
ziqiyap 4:91fa1c5ebbe1 96 sps.GetReadyStatus();
ziqiyap 2:225c3f2a2a8a 97 uint16_t redy = sps.ready;
ziqiyap 2:225c3f2a2a8a 98 if(redy == sps30::SPSisReady) {
ziqiyap 4:91fa1c5ebbe1 99 uint8_t crcc = sps.ReadMeasurement();
ziqiyap 2:225c3f2a2a8a 100 count++;
ziqiyap 2:225c3f2a2a8a 101 if(crcc != sps30::SPSnoERROR) pc.printf("ERROR: %d\r\n", crcc);
ziqiyap 3:572adaa86366 102 else pc.printf(" %5d | %7.3f | %7.3f | %7.3f | %7.3f | %7.3f | %7.3f | %7.3f | %7.3f | %7.3f | %7.3f \r\n", \
ziqiyap 2:225c3f2a2a8a 103 count, sps.mass_1p0_f, sps.mass_2p5_f, sps.mass_4p0_f, sps.mass_10p0_f, sps.num_0p5_f, \
ziqiyap 2:225c3f2a2a8a 104 sps.num_1p0_f, sps.num_2p5_f, sps.num_4p0_f, sps.num_10p0_f, sps.typ_pm_size_f);
ziqiyap 1:6a9693f310f7 105 }
ziqiyap 4:91fa1c5ebbe1 106 */
ziqiyap 4:91fa1c5ebbe1 107 // pc.printf("breakpoint 2");
ziqiyap 4:91fa1c5ebbe1 108 // sps.sensor_data.clear();
ziqiyap 2:225c3f2a2a8a 109 wait(5);
ziqiyap 0:732c556ef648 110 }
ziqiyap 0:732c556ef648 111 }