Die DHT22 und vor allem auch der DHT11 sind "Schätzeisen"
Denke mal, du hast diesen Sensor nicht nur zur Temperaturmessung gewählt, sondern auch für die Messung der rel. Luftfeuchte.
Diese Werte sind auch nicht wirklich genau, wenn schon die Temperaturmessung nicht genau ist kein Wunder.
Wenn du die Temperaturabweichung softwaremässig justieren willst, braucht es zuerst eine Messreihe bei verschiedenen Temperaturen.
Wenn dies linear ist, dann einfach addieren oder subtrahieren.
Bei !linear, die Stützpunkte wo eine größere Änderung(Integral groß an dieser Stelle) stattfindet ermitteln.
Dann hast du eine Tabelle. (zweidimensionales array)
Aus dieser kannst du mit linearer Interpolation den Wert ermitteln, der dem tatsächlichen Wert am Nächsten kommt.
Ein Beispiel der linearen Interpolation von guntherb (es ist schon verstanden was da gemacht wird)
schaut so aus.
Das musst du natürlich auf deine Bedürfnisse anpassen. (Die Messreihe im Array ändern)
int gettime (unsigned long time)
{
const int Tablength = 8;
const int Tab[Tablength][2]={
{5,300},
{13,250 },
{15,130},
{20,100 },
{30,80 },
{40,40 },
{50,10},
{200,1 },
};
if (time>200) time=200;
if (time<5) time=5;
int _MoD=time;
// In Tabelle das passende Wertepaar suchen
int i = 0;
while (i < Tablength && _MoD > Tab[i][0]) i++;
// aus dem ermittelten Wertepaar und dem nächsten darüber den korrekten Wert interpolieren
int _out = ( ((Tab[i][1] - Tab[i-1][1])*( _MoD - Tab[i-1][0] ))
/ (Tab[i][0] - Tab[i-1][0] ))
+ Tab[i-1][1];
return _out;
}