-

Fork of HygroClip2 by Jan Wolfsberger

HygroClip2.cpp

Committer:
wolfsberger
Date:
2016-02-16
Revision:
0:0f5101a649db
Child:
1:810b9b0dd9a4

File content as of revision 0:0f5101a649db:

#include "HygroClip2.h"

HygroClip2::HygroClip2(PinName tx, PinName rx)
    : uart_(tx, rx), temperature_(0.0f), humidity_(0.0f), dataReadyToPars_(false)
{
    buffer_[HYGROCLIP_BUFFER_SIZE] = 0;
    uart_.baud(19200);
    uart_.attach(this, &HygroClip2::uartCallback);
}

void HygroClip2::uartCallback()
{
    static size_t index = 0;
    uint8_t data = uart_.getc();
    
    if (dataReadyToPars_) {
        return;
    }

    if (data == '{') {
        index = 0;
    } else if (data == '\r') {
        dataReadyToPars_ = true;
    } else {
        buffer_[index] = data;
        index++;
    }

    if (index >= HYGROCLIP_BUFFER_SIZE) {
        index = 0;
    }
}

void HygroClip2::update()
{
    if (dataReadyToPars_)
    {
        dataReadyToPars_ = false;
        humidity_ = atof(reinterpret_cast<char *>(&buffer_[11]));
        temperature_ = atof(reinterpret_cast<char *>(&buffer_[29]));
    }
    else
    {
        humidity_ = -1.0f;
        temperature_ = -1.0f;
    }
    
    uart_.printf("{F00RDD}\r");
}

float HygroClip2::getHumidity()
{
    return humidity_;
}
float HygroClip2::getTemperature()
{
    return temperature_;
}
float HygroClip2::getDewPoint()
{
    return 243.04f*(log(getHumidity()/100)+((17.625*getTemperature())/(243.04+getTemperature())))/(17.625-log(getHumidity()/100)-((17.625*getTemperature())/(243.04+getTemperature())));
}
float HygroClip2::getAbsolutHumidity()
{
    float saturationPressure = 611.2f * exp((17.62f * getTemperature()) / (243.12f + getTemperature()));
    float partialPressure = (getHumidity() * saturationPressure) / 100.0f;
    float absoluteHumidity = partialPressure / (461.51f * (getTemperature() + 273.15f));
    return absoluteHumidity*1000;
}