#include #define PM1PIN 18 //DSM501A input D6 on ESP8266 #define PM25PIN 14 // ???? what byte buff[2]; unsigned long durationPM1; unsigned long durationPM25; unsigned long starttime; unsigned long endtime; unsigned long sampletime_ms = 30000; unsigned long lowpulseoccupancyPM1 = 0; unsigned long lowpulseoccupancyPM25 = 0; int i=0; void setup() { Serial.begin(9600); Serial.println("Starting please wait 30s"); pinMode(PM1PIN,INPUT); pinMode(PM25PIN,INPUT); starttime = millis(); } float calculateConcentration(long lowpulseInMicroSeconds, long durationinSeconds){ float ratio = (lowpulseInMicroSeconds/1000000.0)/30.0*100.0; //Calculate the ratio float concentration = 0.001915 * pow(ratio,2) + 0.09522 * ratio - 0.04884;//Calculate the mg/m3 Serial.print("lowpulseoccupancy:"); Serial.print(lowpulseInMicroSeconds); Serial.print(" ratio:"); Serial.print(ratio); Serial.print(" Concentration:"); Serial.println(concentration); return concentration; } void loop() { durationPM1 = pulseIn(PM1PIN, LOW); durationPM25 = pulseIn(PM25PIN, LOW); lowpulseoccupancyPM1 += durationPM1; lowpulseoccupancyPM25 += durationPM25; endtime = millis(); if ((endtime-starttime) > sampletime_ms) //Only after 30s has passed we calcualte the ratio { // ratio1 = (lowpulseoccupancy/1000000.0)/30.0*100.0; //Calculate the ratio // Serial.print("ratio1: "); // Serial.println(ratio1); // concentration = 0.001915 * pow(ratio1,2) + 0.09522 * ratio1 - 0.04884;//Calculate the mg/m3 float conPM1 = calculateConcentration(lowpulseoccupancyPM1,30); float conPM25 = calculateConcentration(lowpulseoccupancyPM25,30); Serial.print("PM1 "); Serial.print(conPM1); Serial.print(" PM25 "); Serial.println(conPM25); // this is pretty negative:) lowpulseoccupancyPM1 = 0; lowpulseoccupancyPM25 = 0; starttime = millis(); } }