Grove Air Quality Sensor.
Fork of Grove_Air_Quality_Sensor_Library by
Diff: Air_Quality.cpp
- Revision:
- 2:95009177a860
- Parent:
- 1:e312d147cadd
- Child:
- 3:c25365a52d78
diff -r e312d147cadd -r 95009177a860 Air_Quality.cpp --- a/Air_Quality.cpp Thu Dec 22 22:33:19 2016 +0000 +++ b/Air_Quality.cpp Fri Dec 23 20:19:35 2016 +0200 @@ -1,8 +1,3 @@ -// -// modified by mbed group for use with the mbed platform -// modification date 9/4/2014 -// - /* AirQuality library v1.0 2010 Copyright (c) Seeed Technology Inc. All right reserved. @@ -23,92 +18,89 @@ License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include"Air_Quality.h" +#include "Air_Quality.h" // Interrupt Handler Assignment Ticker IntHandler; //Get the avg voltage in 5 minutes. -void AirQuality::avgVoltage() -{ - if(i==150) { //sum 5 minutes - vol_standard=temp/150; - temp=0; - debug("Vol_standard in 5 minutes: %d\n\r",vol_standard); - i=0; +void AirQuality::avgVoltage() { + if (i == 150) { //sum 5 minutes + vol_standard = temp / 150; + temp = 0; + debug("Vol_standard in 5 minutes: %d", vol_standard); + i = 0; } else { - temp+=first_vol; + temp += first_vol; i++; } } -void AirQuality::init(PinName pin, void(*IRQ)(void)) -{ - _pin=pin; +void AirQuality::init(PinName pin, void(*IRQ)(void)) { + _pin = pin; AnalogIn sensor(_pin); unsigned char i = 0; - debug("Air Quality Sensor Starting Up...(20s)\n\r"); + debug("Air Quality Sensor Starting Up...(20s)"); wait(20); //20s - init_voltage = sensor.read() * 1000; // boost the value to be on a 0 -> 1000 scale for compatibility - debug("The initial voltage is %d%% of source \n\r",init_voltage/10); - while(init_voltage) { - if((init_voltage < 798) && (init_voltage > 10)) { + init_voltage = (int) (sensor.read() * 1000); // boost the value to be on a 0 -> 1000 scale for compatibility + debug("The initial voltage is %d%% of source ", init_voltage / 10); + while (init_voltage) { + if ((init_voltage < 798) && (init_voltage > 10)) { // the init voltage is ok - first_vol = sensor.read() * 1000;//initialize first value + first_vol = (int) (sensor.read() * 1000);//initialize first value last_vol = first_vol; vol_standard = last_vol; - debug("Sensor ready.\n\r"); + debug("Sensor ready."); error = false;; break; - } else if(init_voltage > 798 || init_voltage <= 10) { + } else if (init_voltage > 798 || init_voltage <= 10) { // The sensor is not ready, wait a bit for it to cool off i++; - debug("Sensor not ready (%d), try %d/5, waiting 60 seconds...\n\r",init_voltage,i); + debug("Sensor not ready (%d), try %d/5, waiting 60 seconds...", init_voltage, i); wait(60);//60s - init_voltage = sensor.read() * 1000; - if(i==5) { + init_voltage = (int) (sensor.read() * 1000); + if (i == 5) { // After 5 minutes warn user that the sensor may be broken i = 0; error = true; - debug("Sensor Error! You may have a bad sensor. :-(\n\r"); + debug("Sensor Error! You may have a bad sensor. :-("); } } else break; } - // Call AirQualityInterrupt every 2seconds + // Call AirQualityInterrupt every 2 seconds IntHandler.attach(IRQ, 2.0); - debug("Test begin...\n\r"); + debug("Test begin..."); } -int AirQuality::slope(void) -{ - while(timer_index) { - if(first_vol-last_vol > 400 || first_vol > 700) { - debug("High pollution! Force signal active.\n\r"); +air_quality_values AirQuality::slope(void) { + while (timer_index) { + if (first_vol - last_vol > 400 || first_vol > 700) { + debug("Very high pollution! Force signal active."); timer_index = 0; avgVoltage(); - return 0; - } else if((first_vol - last_vol > 400 && first_vol < 700) || first_vol - vol_standard > 150) { - debug("sensor_value:%d",first_vol); - debug("\t High pollution!\n\r"); + return VERY_HIGH_POLLUTION; + } else if ((first_vol - last_vol > 400 && first_vol < 700) || first_vol - vol_standard > 150) { + debug("sensor_value:%d", first_vol); + debug("High pollution!"); timer_index = 0; avgVoltage(); - return 1; + return HIGH_POLLUTION; - } else if((first_vol-last_vol > 200 && first_vol < 700) || first_vol - vol_standard > 50) { + } else if ((first_vol - last_vol > 200 && first_vol < 700) || first_vol - vol_standard > 50) { //debug(first_vol-last_vol); - debug("sensor_value:%d",first_vol); - debug("\t Low pollution!\n\r"); + debug("sensor_value:%d", first_vol); + debug("Low pollution!"); timer_index = 0; avgVoltage(); - return 2; + return LOW_POLLUTION; } else { avgVoltage(); - debug("sensor_value:%d",first_vol); - debug("\t Air fresh\n\r"); + debug("sensor_value:%d", first_vol); + debug("No pollution"); timer_index = 0; - return 3; + return NO_POLLUTION; } } - return -1; + return UNKNOWN; }