Seeed Grove Dust Sensor PPD42NS http://wiki.seeed.cc/Grove-Dust_Sensor/

Committer:
mbedAustin
Date:
Fri Mar 09 06:57:34 2018 +0000
Revision:
0:8dd765fb7e02
Initial Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbedAustin 0:8dd765fb7e02 1 #include "mbed.h"
mbedAustin 0:8dd765fb7e02 2 #include "math.h"
mbedAustin 0:8dd765fb7e02 3
mbedAustin 0:8dd765fb7e02 4 // Measure duration of time that the signal is low in a 30sec period.
mbedAustin 0:8dd765fb7e02 5
mbedAustin 0:8dd765fb7e02 6 InterruptIn input(PA_0); // Change your pin name here
mbedAustin 0:8dd765fb7e02 7 Timer t; // measure amount of time signal is low
mbedAustin 0:8dd765fb7e02 8 Ticker m; // every 30 seconds calculate measurement
mbedAustin 0:8dd765fb7e02 9
mbedAustin 0:8dd765fb7e02 10 // Start Timer
mbedAustin 0:8dd765fb7e02 11 void start(void){
mbedAustin 0:8dd765fb7e02 12 t.start();
mbedAustin 0:8dd765fb7e02 13 }
mbedAustin 0:8dd765fb7e02 14
mbedAustin 0:8dd765fb7e02 15 // Stop TImer
mbedAustin 0:8dd765fb7e02 16 void stop(void){
mbedAustin 0:8dd765fb7e02 17 t.stop();
mbedAustin 0:8dd765fb7e02 18 }
mbedAustin 0:8dd765fb7e02 19
mbedAustin 0:8dd765fb7e02 20 // calculate sensor value
mbedAustin 0:8dd765fb7e02 21 void calculate(){
mbedAustin 0:8dd765fb7e02 22 // run measurements
mbedAustin 0:8dd765fb7e02 23 int lpo = t.read_us();
mbedAustin 0:8dd765fb7e02 24 float ratio = t.read_us()/(30000*10.0);
mbedAustin 0:8dd765fb7e02 25 float concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62;
mbedAustin 0:8dd765fb7e02 26 printf("\r\nlpo = %d, r = %f, c = %f pcs/0.01cf\r\n",lpo,ratio,concentration);
mbedAustin 0:8dd765fb7e02 27
mbedAustin 0:8dd765fb7e02 28 // reset and run sensors
mbedAustin 0:8dd765fb7e02 29 t.reset(); // reset mesurement every 30 seconds
mbedAustin 0:8dd765fb7e02 30 input.fall(&start); // start measuring when signal is low
mbedAustin 0:8dd765fb7e02 31 input.rise(&stop); // stop measuring when signal is high
mbedAustin 0:8dd765fb7e02 32 }
mbedAustin 0:8dd765fb7e02 33
mbedAustin 0:8dd765fb7e02 34 int main(){
mbedAustin 0:8dd765fb7e02 35 printf("\r\n Starting...\r\n");
mbedAustin 0:8dd765fb7e02 36 m.attach(&calculate,30.0); // measure for 30 seconds
mbedAustin 0:8dd765fb7e02 37 while(1){
mbedAustin 0:8dd765fb7e02 38 ;
mbedAustin 0:8dd765fb7e02 39 }
mbedAustin 0:8dd765fb7e02 40 }