AirQualityClick on A0 on Nucleo-F411RE
Air.cpp
- Committer:
- Guillaume31
- Date:
- 2015-04-14
- Revision:
- 0:964a928b323e
File content as of revision 0:964a928b323e:
#include "mbed.h" #include "Air.h" Air::Air (PinName pin): _pin (pin) { } /**************************************************************************/ /*! @brief Get the correction factor to correct for temperature and humidity @param[in] t The ambient air temperature @param[in] h The relative humidity @return The calculated correction factor */ /**************************************************************************/ float Air::getCorrectionFactor(float t, float h) { return CORA * (double)t * t - (double)CORB * t + CORC - ((double)h-33.)*CORD; } /**************************************************************************/ /*! @brief Get the correction factor to correct for temperature and humidity a @return The sensor resistance in kOhm */ /**************************************************************************/ float Air::getResistance() { double val = _pin.read(); return ((1023./(double)val) * 5. - 1.)*RLOAD; } /**************************************************************************/ /*! @brief Get the resistance of the sensor, ie. the measurement value corrected for temp/hum @param[in] t The ambient air temperature @param[in] h The relative humidity @return The corrected sensor resistance kOhm */ /**************************************************************************/ float Air::getCorrectedResistance(float t, float h) { return getResistance()/getCorrectionFactor(t, h); } /**************************************************************************/ /*! @brief Get the ppm of CO2 sensed (assuming only CO2 in the air) @return The ppm of CO2 in the air */ /**************************************************************************/ float Air::getPPM() { return PARA * pow(((double)getResistance()/RZERO), -PARB); } /**************************************************************************/ /*! @brief Get the ppm of CO2 sensed (assuming only CO2 in the air), corrected for temp/hum @param[in] t The ambient air temperature @param[in] h The relative humidity @return The ppm of CO2 in the air */ /**************************************************************************/ float Air::getCorrectedPPM(float t, float h) { return PARA * pow(((double)getCorrectedResistance(t, h)/RZERO), -PARB); } /**************************************************************************/ /*! @brief Get the resistance RZero of the sensor for calibration purposes @return The sensor resistance RZero in kOhm */ /**************************************************************************/ float Air::getRZero() { return getResistance() * pow((ATMOCO2/PARA), (1./PARB)); } /**************************************************************************/ /*! @brief Get the corrected resistance RZero of the sensor for calibration purposes @param[in] t The ambient air temperature @param[in] h The relative humidity @return The corrected sensor resistance RZero in kOhm */ /**************************************************************************/ float Air::getCorrectedRZero(float t, float h) { return getCorrectedResistance(t, h) * pow((ATMOCO2/PARA), (1./PARB)); }