Test application for the SDS021 library

Dependencies:   BufferedSerial Sds021 mbed

Test application for the Inovafitness SDS021 particle sensor

Committer:
abouillot
Date:
Thu Mar 02 13:24:56 2017 +0000
Revision:
0:fe81a183132a
Test program for the SDS021 library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
abouillot 0:fe81a183132a 1 /*!
abouillot 0:fe81a183132a 2 * main.cpp
abouillot 0:fe81a183132a 3 *
abouillot 0:fe81a183132a 4 * Program to test interaction with inovafitness SDS021 particle Sensor
abouillot 0:fe81a183132a 5 *
abouillot 0:fe81a183132a 6 * Copyright (c) 2017 - Alexandre Bouillot github.com/abouillot
abouillot 0:fe81a183132a 7 *
abouillot 0:fe81a183132a 8 * Permission is hereby granted, free of charge, to any person obtaining a copy
abouillot 0:fe81a183132a 9 * of this software and associated documnetation files (the "Software"), to deal
abouillot 0:fe81a183132a 10 * in the Software without restriction, including without limitation the rights
abouillot 0:fe81a183132a 11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
abouillot 0:fe81a183132a 12 * copies of the Software, and to permit persons to whom the Software is
abouillot 0:fe81a183132a 13 * furished to do so, subject to the following conditions:
abouillot 0:fe81a183132a 14 *
abouillot 0:fe81a183132a 15 * The above copyright notice and this permission notice shall be included in
abouillot 0:fe81a183132a 16 * all copies or substantial portions of the Software.
abouillot 0:fe81a183132a 17 *
abouillot 0:fe81a183132a 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
abouillot 0:fe81a183132a 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
abouillot 0:fe81a183132a 20 * FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
abouillot 0:fe81a183132a 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
abouillot 0:fe81a183132a 22 * LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
abouillot 0:fe81a183132a 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
abouillot 0:fe81a183132a 24 * THE SOFTWARE.
abouillot 0:fe81a183132a 25 */
abouillot 0:fe81a183132a 26
abouillot 0:fe81a183132a 27 #include "mbed.h"
abouillot 0:fe81a183132a 28 #include "Sds021.h"
abouillot 0:fe81a183132a 29 DigitalOut myled(LED1);
abouillot 0:fe81a183132a 30
abouillot 0:fe81a183132a 31 Serial pc(USBTX, USBRX, 115200);
abouillot 0:fe81a183132a 32 SDS021 sds(PC_10, PC_11);
abouillot 0:fe81a183132a 33
abouillot 0:fe81a183132a 34 void printSdsData()
abouillot 0:fe81a183132a 35 {
abouillot 0:fe81a183132a 36 pc.printf("PM2.5: %f PM10: %f Mode: %d State: %d Interval: %d Id: %04x Version: %02d/%02d/%02d\n", sds.PM2_5(), sds.PM10(), sds.mode(), sds.state(), sds.interval(), sds.id(), sds.firmware().year, sds.firmware().month, sds.firmware().day);
abouillot 0:fe81a183132a 37 }
abouillot 0:fe81a183132a 38
abouillot 0:fe81a183132a 39 void testId()
abouillot 0:fe81a183132a 40 {
abouillot 0:fe81a183132a 41 Timer s;
abouillot 0:fe81a183132a 42 int i;
abouillot 0:fe81a183132a 43 pc.printf("\n++ set id\n");
abouillot 0:fe81a183132a 44 while (!sds.update());
abouillot 0:fe81a183132a 45 int origId = sds.getId();
abouillot 0:fe81a183132a 46 pc.printf("Original id: 0x%04x", origId);
abouillot 0:fe81a183132a 47
abouillot 0:fe81a183132a 48 pc.printf("Set id to 0xcafe\n");
abouillot 0:fe81a183132a 49 sds.setId(0xcafe);
abouillot 0:fe81a183132a 50
abouillot 0:fe81a183132a 51 while (!sds.update());
abouillot 0:fe81a183132a 52 printSdsData();
abouillot 0:fe81a183132a 53
abouillot 0:fe81a183132a 54 for (i=0; i<3; i++) {
abouillot 0:fe81a183132a 55 while (!sds.update());
abouillot 0:fe81a183132a 56 printSdsData();
abouillot 0:fe81a183132a 57 }
abouillot 0:fe81a183132a 58
abouillot 0:fe81a183132a 59 pc.printf("Set id to initial value\n");
abouillot 0:fe81a183132a 60 sds.setId(origId);
abouillot 0:fe81a183132a 61
abouillot 0:fe81a183132a 62 for (i=0; i<3; i++) {
abouillot 0:fe81a183132a 63 while (!sds.update());
abouillot 0:fe81a183132a 64 printSdsData();
abouillot 0:fe81a183132a 65 }
abouillot 0:fe81a183132a 66 }
abouillot 0:fe81a183132a 67 void testMode()
abouillot 0:fe81a183132a 68 {
abouillot 0:fe81a183132a 69 Timer s;
abouillot 0:fe81a183132a 70 int i;
abouillot 0:fe81a183132a 71 pc.printf("\n++ set mode\n");
abouillot 0:fe81a183132a 72 // while (!update());
abouillot 0:fe81a183132a 73 // int origMode = getPassiveMode();
abouillot 0:fe81a183132a 74 int origMode = false;
abouillot 0:fe81a183132a 75
abouillot 0:fe81a183132a 76 pc.printf("Set mode to passive\n");
abouillot 0:fe81a183132a 77 sds.setPassiveMode(true);
abouillot 0:fe81a183132a 78 printSdsData();
abouillot 0:fe81a183132a 79
abouillot 0:fe81a183132a 80 #if 0
abouillot 0:fe81a183132a 81 s.reset();
abouillot 0:fe81a183132a 82 s.start();
abouillot 0:fe81a183132a 83 while (s.read() < 5) {
abouillot 0:fe81a183132a 84 if (sds021.readable()) {
abouillot 0:fe81a183132a 85 pc.printf("%02x ", sds021.getc());
abouillot 0:fe81a183132a 86 }
abouillot 0:fe81a183132a 87 }
abouillot 0:fe81a183132a 88 s.stop();
abouillot 0:fe81a183132a 89 #endif
abouillot 0:fe81a183132a 90 pc.printf("\nrequest data update\n");
abouillot 0:fe81a183132a 91 sds.readData();
abouillot 0:fe81a183132a 92 printSdsData();
abouillot 0:fe81a183132a 93 pc.printf("data update completed\n");
abouillot 0:fe81a183132a 94 #if 0
abouillot 0:fe81a183132a 95 s.reset();
abouillot 0:fe81a183132a 96 s.start();
abouillot 0:fe81a183132a 97 while (s.read() < 5) {
abouillot 0:fe81a183132a 98 if (sds021.readable()) {
abouillot 0:fe81a183132a 99 pc.printf("%02x ", sds021.getc());
abouillot 0:fe81a183132a 100 }
abouillot 0:fe81a183132a 101 }
abouillot 0:fe81a183132a 102 s.stop();
abouillot 0:fe81a183132a 103 #endif
abouillot 0:fe81a183132a 104
abouillot 0:fe81a183132a 105 pc.printf("set mode to active\n");
abouillot 0:fe81a183132a 106 sds.setPassiveMode(false);
abouillot 0:fe81a183132a 107 printSdsData();
abouillot 0:fe81a183132a 108
abouillot 0:fe81a183132a 109 #if 0
abouillot 0:fe81a183132a 110 s.reset();
abouillot 0:fe81a183132a 111 s.start();
abouillot 0:fe81a183132a 112 while (s.read() < 10) {
abouillot 0:fe81a183132a 113 if (sds021.readable()) {
abouillot 0:fe81a183132a 114 pc.printf("%02x ", sds021.getc());
abouillot 0:fe81a183132a 115 }
abouillot 0:fe81a183132a 116 }
abouillot 0:fe81a183132a 117 s.stop();
abouillot 0:fe81a183132a 118 #endif
abouillot 0:fe81a183132a 119
abouillot 0:fe81a183132a 120 printf("set mode to original value: %d", origMode);
abouillot 0:fe81a183132a 121 sds.setPassiveMode(origMode);
abouillot 0:fe81a183132a 122 printSdsData();
abouillot 0:fe81a183132a 123
abouillot 0:fe81a183132a 124 for ( i=0; i<3; i++) {
abouillot 0:fe81a183132a 125 while (!sds.update());
abouillot 0:fe81a183132a 126 printSdsData();
abouillot 0:fe81a183132a 127 }
abouillot 0:fe81a183132a 128 }
abouillot 0:fe81a183132a 129 void testInterval()
abouillot 0:fe81a183132a 130 {
abouillot 0:fe81a183132a 131 Timer s;
abouillot 0:fe81a183132a 132 int i;
abouillot 0:fe81a183132a 133 pc.printf("\n++ set mode\n");
abouillot 0:fe81a183132a 134 while (!sds.update());
abouillot 0:fe81a183132a 135 int origInterval = sds.getInterval();
abouillot 0:fe81a183132a 136
abouillot 0:fe81a183132a 137 pc.printf("Set to 0 seconds\n");
abouillot 0:fe81a183132a 138 sds.setInterval(0);
abouillot 0:fe81a183132a 139 s.reset();
abouillot 0:fe81a183132a 140 s.start();
abouillot 0:fe81a183132a 141 while (!sds.update());
abouillot 0:fe81a183132a 142 pc.printf("delay: %d ", s.read());
abouillot 0:fe81a183132a 143 printSdsData();
abouillot 0:fe81a183132a 144 while (!sds.update());
abouillot 0:fe81a183132a 145 pc.printf("delay: %d ", s.read());
abouillot 0:fe81a183132a 146 printSdsData();
abouillot 0:fe81a183132a 147 s.stop();
abouillot 0:fe81a183132a 148
abouillot 0:fe81a183132a 149 pc.printf("Set to 5 minutes\n");
abouillot 0:fe81a183132a 150 sds.setInterval(5);
abouillot 0:fe81a183132a 151 s.reset();
abouillot 0:fe81a183132a 152 s.start();
abouillot 0:fe81a183132a 153 while (!sds.update());
abouillot 0:fe81a183132a 154 pc.printf("delay: %d ", s.read());
abouillot 0:fe81a183132a 155 printSdsData();
abouillot 0:fe81a183132a 156 while (!sds.update());
abouillot 0:fe81a183132a 157 pc.printf("delay: %d ", s.read());
abouillot 0:fe81a183132a 158 printSdsData();
abouillot 0:fe81a183132a 159 s.stop();
abouillot 0:fe81a183132a 160
abouillot 0:fe81a183132a 161 pc.printf("Set to 2 minutes\n");
abouillot 0:fe81a183132a 162 sds.setInterval(2);
abouillot 0:fe81a183132a 163 s.reset();
abouillot 0:fe81a183132a 164 s.start();
abouillot 0:fe81a183132a 165 while (!sds.update());
abouillot 0:fe81a183132a 166 pc.printf("delay: %d", s.read());
abouillot 0:fe81a183132a 167 printSdsData();
abouillot 0:fe81a183132a 168 while (!sds.update());
abouillot 0:fe81a183132a 169 pc.printf("delay: %d", s.read());
abouillot 0:fe81a183132a 170 printSdsData();
abouillot 0:fe81a183132a 171 s.stop();
abouillot 0:fe81a183132a 172
abouillot 0:fe81a183132a 173 pc.printf("Set beyond 30 minutes (45 minutes) \n");
abouillot 0:fe81a183132a 174 sds.setInterval(45);
abouillot 0:fe81a183132a 175 sds.readData();
abouillot 0:fe81a183132a 176 while (!sds.update());
abouillot 0:fe81a183132a 177 printSdsData();
abouillot 0:fe81a183132a 178
abouillot 0:fe81a183132a 179 pc.printf("Set back to initial value\n");
abouillot 0:fe81a183132a 180 sds.setInterval(origInterval);
abouillot 0:fe81a183132a 181 s.reset();
abouillot 0:fe81a183132a 182 s.start();
abouillot 0:fe81a183132a 183 while (!sds.update());
abouillot 0:fe81a183132a 184 pc.printf("delay: %d", s.read());
abouillot 0:fe81a183132a 185 printSdsData();
abouillot 0:fe81a183132a 186 while (!sds.update());
abouillot 0:fe81a183132a 187 pc.printf("delay: %d", s.read());
abouillot 0:fe81a183132a 188 printSdsData();
abouillot 0:fe81a183132a 189 s.stop();
abouillot 0:fe81a183132a 190 }
abouillot 0:fe81a183132a 191 int main()
abouillot 0:fe81a183132a 192 {
abouillot 0:fe81a183132a 193 Timer s;
abouillot 0:fe81a183132a 194 int i;
abouillot 0:fe81a183132a 195 pc.printf("\n**************SDS021 TEST***************\n");
abouillot 0:fe81a183132a 196 wait(1);
abouillot 0:fe81a183132a 197
abouillot 0:fe81a183132a 198 sds.setPassiveMode(false);
abouillot 0:fe81a183132a 199 sds.setInterval(0);
abouillot 0:fe81a183132a 200
abouillot 0:fe81a183132a 201 SDS021::version_t ver = sds.getVersion();
abouillot 0:fe81a183132a 202 pc.printf("Version: %02d/%02d/%02d\n", ver.year, ver.month, ver.day);
abouillot 0:fe81a183132a 203 sds.setId(0xaa3f);
abouillot 0:fe81a183132a 204
abouillot 0:fe81a183132a 205
abouillot 0:fe81a183132a 206 // sds.setPassiveMode(true);
abouillot 0:fe81a183132a 207 //setId(0xcafe);
abouillot 0:fe81a183132a 208
abouillot 0:fe81a183132a 209 // readData();
abouillot 0:fe81a183132a 210
abouillot 0:fe81a183132a 211
abouillot 0:fe81a183132a 212
abouillot 0:fe81a183132a 213 testId();
abouillot 0:fe81a183132a 214
abouillot 0:fe81a183132a 215 testMode();
abouillot 0:fe81a183132a 216 testInterval();
abouillot 0:fe81a183132a 217
abouillot 0:fe81a183132a 218 pc.printf("\n**************SDS021 TEST COMPLETED***************\n");
abouillot 0:fe81a183132a 219 }