Test application for the SDS021 library

Dependencies:   BufferedSerial Sds021 mbed

Test application for the Inovafitness SDS021 particle sensor

Files at this revision

API Documentation at this revision

Comitter:
abouillot
Date:
Thu Mar 02 13:24:56 2017 +0000
Commit message:
Test program for the SDS021 library

Changed in this revision

BufferedSerial.lib Show annotated file Show diff for this revision Revisions of this file
Sds021.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r fe81a183132a BufferedSerial.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BufferedSerial.lib	Thu Mar 02 13:24:56 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/sam_grove/code/BufferedSerial/#a0d37088b405
diff -r 000000000000 -r fe81a183132a Sds021.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Sds021.lib	Thu Mar 02 13:24:56 2017 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/abouillot/code/Sds021/#fd34f67797d9
diff -r 000000000000 -r fe81a183132a main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Mar 02 13:24:56 2017 +0000
@@ -0,0 +1,219 @@
+/*!
+ * main.cpp
+ *
+ * Program to test interaction with inovafitness SDS021 particle Sensor
+ *
+ * Copyright (c) 2017 -  Alexandre Bouillot github.com/abouillot
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documnetation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to  whom the Software is
+ * furished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+ 
+#include "mbed.h"
+#include "Sds021.h"
+DigitalOut myled(LED1);
+
+Serial pc(USBTX, USBRX, 115200);
+SDS021 sds(PC_10, PC_11);
+
+void printSdsData()
+{
+    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);
+}
+
+void testId()
+{
+    Timer s;
+    int i;
+    pc.printf("\n++ set id\n");
+    while (!sds.update());
+    int origId = sds.getId();
+    pc.printf("Original id: 0x%04x", origId);
+
+    pc.printf("Set id to 0xcafe\n");
+    sds.setId(0xcafe);
+
+    while (!sds.update());
+    printSdsData();
+
+    for (i=0; i<3; i++) {
+        while (!sds.update());
+        printSdsData();
+    }
+
+    pc.printf("Set id to initial value\n");
+    sds.setId(origId);
+
+    for (i=0; i<3; i++) {
+        while (!sds.update());
+        printSdsData();
+    }
+}
+void testMode()
+{
+    Timer s;
+    int i;
+    pc.printf("\n++ set mode\n");
+//    while (!update());
+//    int origMode = getPassiveMode();
+    int origMode = false;
+
+    pc.printf("Set mode to passive\n");
+    sds.setPassiveMode(true);
+    printSdsData();
+
+#if 0
+    s.reset();
+    s.start();
+    while (s.read() < 5) {
+        if (sds021.readable()) {
+            pc.printf("%02x ", sds021.getc());
+        }
+    }
+    s.stop();
+#endif
+    pc.printf("\nrequest data update\n");
+    sds.readData();
+    printSdsData();
+    pc.printf("data update completed\n");
+#if 0
+    s.reset();
+    s.start();
+    while (s.read() < 5) {
+        if (sds021.readable()) {
+            pc.printf("%02x ", sds021.getc());
+        }
+    }
+    s.stop();
+#endif
+
+    pc.printf("set mode to active\n");
+    sds.setPassiveMode(false);
+    printSdsData();
+
+#if 0
+    s.reset();
+    s.start();
+    while (s.read() < 10) {
+        if (sds021.readable()) {
+            pc.printf("%02x ", sds021.getc());
+        }
+    }
+    s.stop();
+#endif
+
+    printf("set mode to original value: %d", origMode);
+    sds.setPassiveMode(origMode);
+    printSdsData();
+
+    for ( i=0; i<3; i++) {
+        while (!sds.update());
+        printSdsData();
+    }
+}
+void testInterval()
+{
+    Timer s;
+    int i;
+    pc.printf("\n++ set mode\n");
+    while (!sds.update());
+    int origInterval = sds.getInterval();
+
+    pc.printf("Set to 0 seconds\n");
+    sds.setInterval(0);
+    s.reset();
+    s.start();
+    while (!sds.update());
+    pc.printf("delay: %d ", s.read());
+    printSdsData();
+    while (!sds.update());
+    pc.printf("delay: %d ", s.read());
+    printSdsData();
+    s.stop();
+
+    pc.printf("Set to 5 minutes\n");
+    sds.setInterval(5);
+    s.reset();
+    s.start();
+    while (!sds.update());
+    pc.printf("delay: %d ", s.read());
+    printSdsData();
+    while (!sds.update());
+    pc.printf("delay: %d ", s.read());
+    printSdsData();
+    s.stop();
+
+    pc.printf("Set to 2 minutes\n");
+    sds.setInterval(2);
+    s.reset();
+    s.start();
+    while (!sds.update());
+    pc.printf("delay: %d", s.read());
+    printSdsData();
+    while (!sds.update());
+    pc.printf("delay: %d", s.read());
+    printSdsData();
+    s.stop();
+
+    pc.printf("Set beyond 30 minutes (45 minutes) \n");
+    sds.setInterval(45);
+    sds.readData();
+    while (!sds.update());
+    printSdsData();
+
+    pc.printf("Set back to initial value\n");
+    sds.setInterval(origInterval);
+    s.reset();
+    s.start();
+    while (!sds.update());
+    pc.printf("delay: %d", s.read());
+    printSdsData();
+    while (!sds.update());
+    pc.printf("delay: %d", s.read());
+    printSdsData();
+    s.stop();
+}
+int main()
+{
+    Timer s;
+    int i;
+    pc.printf("\n**************SDS021 TEST***************\n");
+    wait(1);
+
+    sds.setPassiveMode(false);
+    sds.setInterval(0);
+
+    SDS021::version_t ver = sds.getVersion();
+    pc.printf("Version: %02d/%02d/%02d\n", ver.year, ver.month, ver.day);
+    sds.setId(0xaa3f);
+    
+
+//    sds.setPassiveMode(true);
+//setId(0xcafe);
+
+//    readData();
+
+
+
+    testId();
+
+    testMode();
+    testInterval();
+
+    pc.printf("\n**************SDS021 TEST COMPLETED***************\n");
+}
diff -r 000000000000 -r fe81a183132a mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Mar 02 13:24:56 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/ad3be0349dc5
\ No newline at end of file