Salve a tutti
sto sviluppando un programma in C sul rasberry con Debian, per recuperare valori dei sensori di temperatura.
Ho un problema con un formato di un valore che ogni tanto cambia.
Mi spiego meglio: il valore della temperatura che dovrebbe essere 18.55, ad un certo punto mi viene recuperato 185.5.
Di seguito il codice
void Raspy_DS18B20(char *ip_sn,char *sensore,char *area,char *device) { //Sensore DS18B20 collegato al raspberry
char devPath[128]; // Path to device
char buf[256]; // Data from device
char tmpData[6]; // Temp C * 1000 reported by device
char path[] = "/sys/bus/w1/devices";
ssize_t numRead;
char temperature[6];
// Assemble path to OneWire device
sprintf(devPath, "%s/%s/w1_slave", path, ip_sn);
int fd = open(devPath, O_RDONLY);
if(fd == -1)
{
perror ("Couldn't open the w1 device.");
}
while((numRead = read(fd, buf, 256)) > 0)
{
strncpy(tmpData, strstr(buf, "t=") + 2, 5);
float tempC = strtof(tmpData, NULL);
tempC=tempC/1000;
snprintf(temperature,6,"%f",tempC);
printf("%f\n",tempC);
printf("%s\n",temperature);
syslog(LOG_DAEMON || LOG_WARNING,"DS18B20 camera Float: %f\n",tempC);
syslog(LOG_DAEMON || LOG_WARNING,"DS18B20 camera String: %s\n",temperature);
}
close(fd);
memset(StringaSQL, 0, 200);
sprintf(StringaSQL, "INSERT INTO TemperatureLOG (TimeLog,Zona,Sensore,T,U) VALUES (CURRENT_TIMESTAMP,'%s','%s',%s,'0')", area, sensore, temperature);
printf("insert: %s\n",StringaSQL);
insertMySQL(StringaSQL);
}
La mia idea è di fare un check che il formato della temperatura sia sempre del formato
- ##.## oppure
- #.## oppure
- ##.#
Accetto ovviamente anche suggerimenti per modificare il mio codice (ammetto non essere il massimo) in quanto il problema del valore con la virgola modificata, non è dato dal sensore, ma sono quasi sicuro dal codice.
Grazie in anticipo a tutti per l'aiuto