-
Embed:
(wiki syntax)
Show/hide line numbers
HygroClip2.cpp
00001 #include "HygroClip2.h" 00002 #include <cmath> 00003 00004 HygroClip2::HygroClip2(PinName tx, PinName rx) 00005 : uart_(tx, rx), temperature_(0.0f), humidity_(0.0f), dataReadyToPars_(false) 00006 { 00007 buffer_[HYGROCLIP_BUFFER_SIZE] = 0; 00008 uart_.baud(19200); 00009 uart_.attach(this, &HygroClip2::uartCallback); 00010 } 00011 00012 void HygroClip2::uartCallback() 00013 { 00014 static size_t index = 0; 00015 uint8_t data = uart_.getc(); 00016 00017 if (dataReadyToPars_) { 00018 return; 00019 } 00020 00021 if (data == '{') { 00022 index = 0; 00023 } else if (data == '\r') { 00024 dataReadyToPars_ = true; 00025 } else { 00026 buffer_[index] = data; 00027 index++; 00028 } 00029 00030 if (index >= HYGROCLIP_BUFFER_SIZE) { 00031 index = 0; 00032 } 00033 } 00034 00035 void HygroClip2::update() 00036 { 00037 if (dataReadyToPars_) 00038 { 00039 dataReadyToPars_ = false; 00040 humidity_ = atof(reinterpret_cast<char *>(&buffer_[11])); 00041 temperature_ = atof(reinterpret_cast<char *>(&buffer_[29])); 00042 isDataValid_ = true; 00043 } 00044 else 00045 { 00046 humidity_ = NAN; 00047 temperature_ = NAN; 00048 isDataValid_ = false; 00049 } 00050 00051 uart_.printf("{F00RDD}\r"); 00052 } 00053 00054 float HygroClip2::getHumidity() 00055 { 00056 return humidity_; 00057 } 00058 float HygroClip2::getTemperature() 00059 { 00060 return temperature_; 00061 } 00062 float HygroClip2::getDewPoint() 00063 { 00064 return 243.04f*(log(getHumidity()/100)+((17.625*getTemperature())/(243.04+getTemperature())))/(17.625-log(getHumidity()/100)-((17.625*getTemperature())/(243.04+getTemperature()))); 00065 } 00066 float HygroClip2::getAbsolutHumidity() 00067 { 00068 float saturationPressure = 611.2f * exp((17.62f * getTemperature()) / (243.12f + getTemperature())); 00069 float partialPressure = (getHumidity() * saturationPressure) / 100.0f; 00070 float absoluteHumidity = partialPressure / (461.51f * (getTemperature() + 273.15f)); 00071 return absoluteHumidity*1000; 00072 } 00073 bool HygroClip2::isDataValid() 00074 { 00075 return isDataValid_; 00076 }
Generated on Wed Jul 13 2022 21:27:06 by 1.7.2