
Test program for SPS30
main.cpp@4:91fa1c5ebbe1, 2019-03-27 (annotated)
- 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?
User | Revision | Line number | New 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 | } |