Traslazione di scala

Salve a tutti,
Ho un sensore DHT22 che misura la temperatura con range -40°C a +125°C
Sul display ho una progress bar con valori che vanno da 0 a 100
Il dato che mi tira furi il sensore è un float con precisione mezzo grado, per esempio adesso ho 21.6°C

Mi sto incartando con le scale... c'è una formula per riportare quello che indica il sensore ma su una scala 0-100? dove 0=-40°C e 100=+125°C?

Grazie a tutti.
La mia prof di matematica non sarebbe fiera di me in questo momento :smiley:

Guarda la funzione map
Occhio che vuole come parametri dei long e non dei float

Grandeeee :smiley:
adesso me la studio un po e vediamo che viene fuori.
Grazie per il momento.

robotronico:
. . . La mia prof di matematica non sarebbe fiera di me in questo momento :smiley:

Ma no! È solo pigrizia mentale. Sono sicuro che ce la puoi fare anche senza 'map'. Ti do un aiutino:
Se 'temp' è la variabile float che contiene il valore della temperatura, trasformala in modo che sia sempre positiva (facile, no?) e chiamala 'val'.
Ora è diventato un 'problema del tre semplice' (te lo ricordi?):

'val' : <MASSIMO_VALORE_POSITIVO_DI_'val'> = x : 100

Risolvi la 'x' e hai il valore per la progress bar.

Ciao,
P.

Ciao
Tu vuoi andare da -40...125 a 0...100, quindi devi applicare un offset di 40 e un guadagno di
100/(125-(-40)) = 100/165 = 0,6061:
float x = int((t+40)0.606110)/10;

Prova:
t x
-40 0.0
0 24.2
100 84.8
125 100.0

Puoi anche fare: byte dieci_x = (t+40)0.606110;
e poi usare dieci_x/10.

P.s.: pgiagno, oltre alla proporzione devi considerare i 40 gradi di differenza all'inizio della scala, quindi:
x : 100 = (t+40) : 165

domandina all'utente che pone la domanda.
Ma arriverai mai a +125 ? Temperatura ambientale ?
Se si, io considererei che arrivi al max a 50° (e siamo già a un valore molto alto). Altrimenti tra 51 e 125 (da 75% circa a 100% non lo vedrai mai sul display)

Sì, se lavorerà solo a temperature ambientali può semplicemente prendere i valori da 0 a 100 così come sono...

Direi che siete fantastici!
Ovviamente -40 +125 non serve a nulla quando di parla di temperatura ambiente.
Per apprezzare meglio il variare della progressbar avevo pensato ad una temperatura che poteva andare da -10 a +50.
Grazie a tutti per i consigli. Siete preziosi.

robotronico:
Per apprezzare meglio il variare della progressbar avevo pensato ad una temperatura che poteva andare da -10 a +50.

Beh ti hanno già dato validi consigli, comunque sia se vuoi una progress bar cha vada da 0 a 100 da un valore float "t" verso una variabile int "bar", e parametrizzando i limiti (da verificare comunque) farei semplicemente una cosa del genere:

...
#define T_MIN -10
#define T_MAX 50
...
    if (t < T_MIN) t = T_MIN;
    if (t > T_MAX) t = T_MAX;
    bar = (t-T_MIN)*100.0/(T_MAX-T_MIN);
...

Grazie Ragazzi.
Credo sia uscito bene. Grazie a tutti per i consigli.

Bello! :slight_smile:

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.