ciao MauroTec ho sentito come promesso il programmatore del Glcd e lui mi ha risposto cosi:
- Temperatura:
Senza farla tanto lunga, devi vedere la temperatura come un segnale di
tensione analogico che devi convertire in digitale utilizzando L 'ADC del
microcontrollore e visualizzarla sul display.
Per quanto riguarda il lavoro che ho fatto sul display della 600, ho
"caratterizzato il sensore" annotandomi delle coppie di valore (tensione,
temperatura) costruendo così una tabella di 20-30 coppie.
A questo punto ho usato una semplice funzione per linearizzare la tabella
stessa così da produrre, avendo in ingresso un conteggio relativo alla
conversione di una tensione, un valore di temperatura in uscita (approssimato
ma quanto più aderente alla realtà quanto più ampia è la tabella). Questo è
tutto. Comunque ti allego la tebella di conversione del sensore temperatura
della 600 con la funzione di conversione che prende come paramentro di ingresso
i conteggi (derivanti dalla conversione Analogico Digitale della tensione del
sensore temperatura) e ritorna un intero che è il valore della temperatura
corrispondente alla tensione di ingresso.Per avere una misura meno "nervosa",
prima di chiamare la funzione di temperatura, ti consiglio di fare una media
matematica di 10-15 valori di conteggi.
e ecco il codice che ha usato:
#define LIMITE_CONTEGGI_AI_TEMP 1010
#define ERR_MISURA 0xCFFE
#define MAX_PT_T 26
// Tabella conteggi / temperatura acqua
const int TABT[MAX_PT_T][2]=
{
160, 121,
211 , 111,
251 , 104,
263 , 101,
274 , 99,
286 , 96,
299 , 94,
314 , 91,
328 , 89,
351 , 85,
361 , 83,
383 , 80,
406 , 76,
437 , 71,
468 , 67,
498 , 63,
555 , 56,
613 , 48,
665 , 42,
726 , 35,
795 , 28,
858 , 23,
916 , 18,
960 , 16,
974 , 14,
995 , 13
};
int ConvTAcqua(int Conteggi)
// Converte una misura di temperatura acqua
{
//*******************************************************/
//
// Conversione TEMPERATURA Conteggi/Gradi
//
// T(i+1)-T(i)
// T = T(i) + ------------- * ( Conteggi - C(i) )
// C(i+1)-C(i)
//
//*******************************************************/
unsigned char i;
int locCont;
int C1;
int C2;
int T1;
int T2;
int DeltaT;
int DeltaC;
int DeltaCont;
int Temp;
if (Conteggi > LIMITE_CONTEGGI_AI_TEMP || Conteggi==0) return (ERR_MISURA); // DownScale e Conteggi allo Start
locCont = Conteggi;
// Sotto il minimo valore in tabella
if (Conteggi <= TABT[0][0]) return (TABT[0][1]);
// Valore nel range
for (i=1; i<MAX_PT_T; i++)
{
C2 = TABT[i][0];
if (Conteggi < C2)
{
C1 = TABT[i-1][0];
T1 = TABT[i-1][1];
T2 = TABT[i][1];
break;
}
}
DeltaT = (T2 - T1);
DeltaC = (C2 - C1);
DeltaCont = (locCont - C1);
Temp = T1+(DeltaT*DeltaCont)/DeltaC;
return(Temp);
}
secondo te e possibile fare tutto questo con arduino ?? e mi aiuteresti a modificare il codice per farlo capire ad arduino ??