// Berechnung der Feuchte über die Sättigungsfeuchte und die Temperatur
//
// Die gemessene Temperatur ist (empirisch ernittelt) um 3.2°C zu hoch, deshalb ist die gemessene
// Feuchte immer deutlich zu niedrig. Mit Hilfe der Sättigungs-Tabelle wird nun die absolute Feuchte bei der
// wahren Temperatur (Tmess - 3.2°C) ermittelt und dann die relative Feuchte berechnet.

#define INTERPOL

#include <math.h>
#include "interpolation.h"


// Berechnung des Dampgehaltes bei der gemessenen Temperatur über Interpolation in der dampftabelle
//
// dampfgehalt = d[t] + ((d[t+1] - d[t]) / 1) * (temp - t)
// mit t = int(temp)-indexOffset
// d[t] = dampftabelle[t]
// temp: gemessene Temperatur
// return: Dampfgehalt in g/m3
float getDampfgehalt(float temp)
{
    int index = (int)temp - indexOffset;
    if (index < 0)
    {
        index = 0;
    }
    if (index > sizeof(dampftabelle) / sizeof(dampftabelle[0]))
    {
        index = sizeof(dampftabelle) / sizeof(dampftabelle[0]) - 1;
    }
    float d1 = dampftabelle[index];
    float d2 = dampftabelle[index + 1];
    return d1 + ((d2 - d1) / 1) * (temp - (index + indexOffset));
}

// Berechnung der relativen Feuchte
//
// temp: gemessene Temperatur
// hum: gemessene relative Feuchte
// return: relative Feuchte
int getRelativeFeuchte(float temp, float hum)
{
    float dampfmess = getDampfgehalt(temp);
    float dampfecht = getDampfgehalt(temp - tempOffset);
    return round((dampfmess * hum / dampfecht) + humOffset); 
}   