-
Fork of HygroClip2 by
Diff: HygroClip2.cpp
- Revision:
- 0:0f5101a649db
- Child:
- 1:810b9b0dd9a4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HygroClip2.cpp Tue Feb 16 11:34:37 2016 +0000 @@ -0,0 +1,69 @@ +#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; +}