Salve ha tutti.
Ho un programma che leggendo un esadecimale mi dovrebbe "tirare fuori" la temperatura in Celcius, ma mi viene sballata di quasi 5 gradi(almeno dell'esempio che posto sotto; il risultato è sicuro perchè viene da un articolo scientifico così come le formule).Qualcuno di voi mi può essere di aiuto???
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <unistd.h>
uint16_t xconvert_thermistor_resistance(uint16_t thermistor)
{
float adc = (float)thermistor;
uint16_t Rthr = 10000 * (1023-adc) / adc;
return Rthr;
}
float xconvert_thermistor_temperature(uint16_t thermistor)
{
float temperature,temperatureCels, temperatureKelv,temperatureFah, a, b, c, Rthr;
a = 0.001307050;
b = 0.000214381;
c = 0.000000093;
Rthr = xconvert_thermistor_resistance(thermistor);
temperatureKelv = 1 / (a + b * log(Rthr) + c * pow(log(Rthr),3));
temperatureCels = temperatureKelv - 273.15; // Convert from Kelvin to Celcius
temperatureFah = (temperatureCels * 9/5) + 32;
//printf("debug 3: a=%lg b=%lg c=%lg Rt=%lg Kelv=%lg Cels=%lg Fah=%lg \n",a,b,c,Rthr,temperatureKelv,temperatureCels,temperatureFah);
return temperatureCels;
}
int main(){
uint16_t thermistor = 0x01e1;
printf("debug 0:thermistor=%u \n",thermistor);
printf ("Temp: %f\t", xconvert_thermistor_temperature(thermistor));
getchar()!='\n';
}
Il risultato è 22.47 e dovrebbe essere 27.53(naturalmente sono sbagliati anche le altre temperature, ma risolto questo penso di farcela anche con le altre)
Grazie