#include int DustSensePin = 13; unsigned long duration; unsigned long starttime; unsigned long sampletime_ms = 30000;//sample 30s ; unsigned long lowpulseoccupancy = 0; float ratio = 0; float concentration = 0; void setup() { Serial.begin(9600); Serial.println("Starting Air Sensor, please wait for readings..."); pinMode(DustSensePin,INPUT); starttime = millis();//get the current time; } void loop() { duration = pulseIn(DustSensePin, LOW); lowpulseoccupancy = lowpulseoccupancy+duration; if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s { ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve Serial.print(lowpulseoccupancy); Serial.print(","); Serial.print(ratio); Serial.print(","); Serial.println(concentration); lowpulseoccupancy = 0; starttime = millis(); } }