#include int DustSensePin = 13; //let's start with 100 readings. (copy and paste) unsigned int airreading[100] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; unsigned long starttime = 0; unsigned long sampletime_ms = 60000;//sample 60s == 60000 ; unsigned long lowpulseoccupancy = 0; float ratio = 0; float concentration = 0; unsigned int x = 0; unsigned int toplimit = 0; unsigned long sum = 0; //highest number possible - 32 bit unsigned, so 4 billion unsigned int average = 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() { airreading[x] = pulseIn(DustSensePin, LOW, 500000); /*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(); } */ //if ((millis()-starttime) > sampletime_ms){ //KISS. Relative readings only. //Something else keeps the time. if (airreading[x] != 0){ Serial.println(airreading[x]); x=x+1; if(x>100){ x = 0; } } //starttime = millis(); //} //KISS. Average for a minute, and store that data in a webpage (that part will be in ethernet sensor test 3). // if ((millis()-starttime) > sampletime_ms){ toplimit = x; // don't read the zeros if(toplimit == 0){ toplimit = 1; //to avoid divide by zero, in case sum / toplimit is both zero } for (x=0; x