IOT e variabili

Salve a tutti
Ho realizzato un programma per leggere il valore e avere un grafico del Ph e della temperatura del mio acquario sul cellulare.
Funziona tutto, l'unica cosa che non mi piace e che non sono riuscito a fare e visualizzare sulla dashboard il valore del Ph con 2 decimali e la temperatura con 1, al momento ne visualizza 3 decimali. Il fastidio maggiore è il grafico che avendo molti decimali è molto frastagliato e quindi le scale sono troppo ristrette.
Spero d'essermi spiegato bene.
Grazie

Grosso modo sì, ti sei spiegato

Se mostri il programma ci guardiamo dentro

#define pinIngr 34
#define pinIngr2 35

float Po = 0;
float PH_step;
float tens_ph;
float tempe;
float PH4 = 2.85;
float PH7 = 2.30;
int buf [10];
int buf2 [10];
unsigned long t1, dt;

void readSensor(){
   for (int i = 0; i < 10; i++)
  {
    buf[i] = analogRead(pinIngr);
    buf2[i] = analogRead(pinIngr2);
    delay(10);
  }
  float avgValue = 0;
  float avgValue2 = 0;
  for (int i = 0; i < 10; i++){
    avgValue += buf[i];
    avgValue2 += buf2[i];
  }
  tempe = (3.3 / 4096.0) * avgValue2;
  tens_ph = (3.3 / 4096.0) * (avgValue / 10);
  PH_step = (PH4 - PH7) / 3;
  Po = 7.00 + ((PH7 - tens_ph) / PH_step);
  tempo = Po;//tempo variabile float di IOT
  temperature = tempe; //temperature variabile float di IOT

Aggiungo che come hd uso un esp32 e un modulo Ph4502c

Che risoluzione desideri?

Ciao
per il Ph due cifre decimali e per la temperatura un decimale

Per la temperatura lo dividi per 10 castato a int e lo rimoltiplichi

Per il ph usi 100 invece che 10

Giusto, la soluzione era molto semplice e che uso arduino IOT da qualche giorno, perché con un altro hd uso l'App B... che in quel caso i decimali te li fa scegliere nella variabile.
Grazie sempre di tutto.

  Po = (Po * 100);
  misura = Po; // int misura
  Po = ((float)misura / 100);

Alla fine ho fatto così!

Per chi volesse usare lo stesso modulo che ho usato io (pH 4502c)

#define pinIngr 34
#define pinIngr2 35

float Po = 0;
float PH_step;
float tens_ph;
int tempe;
float PH4 = 2.85;
float PH7 = 2.30;
int buf [10];
int tempeMax = 30;
float temper = 0;

void readSensor(){
  float avgValue = 0;
  for (int i = 0; i < 10; i++){
  buf[i] = analogRead(pinIngr);
  delay(10);
  avgValue += buf[i];
   }
  tens_ph = (3.3 / 4096.0) * (avgValue / 10);
  PH_step = (PH4 - PH7) / 3;
  Po = 7.00 + ((PH7 - tens_ph) / PH_step);
  Po = (int(Po * 100)) / 100.00;
  tempo = Po;
  tempe = analogRead(pinIngr2);
  temper = (tempe * tempeMax) / 4096.0;
  temper = (int(temper * 10)) / 10.0;
  temperature = temper;

Più semplicemente:
Po = (int(Po*100))/100.0;
o, in C puro:
Po = ((int)(Po*100))/100.0;
Nota che così tronchi alla seconda cifra decimale. Se vuoi fare un'approssimazione, devi aggiungere 0,5 prima di fare l'intero..

Grazie mille per la spiegazione
Purtroppo le mie conoscenze di programmazione sono basilari da hobbista, ma mi piace applicarmi per trovare la soluzione.

Potresti spiegarmi meglio a cosa serve l’aggiunta di 0,5?

Se faccio l'intero di 10,9 ottengo 10, mentre se faccio l'intero di 10,9+0,5 ottengo 11.
Se faccio l'intero di 10,4 ottengo 10; se faccio l'intero di 10,4+0,5 ottengo ugualmente 10: aggiungendo 0,5, fino a 10,499 arrotonda per difetto; da 10,5 arrotonda per eccesso.

Grazie mille.
Mi hai rinfrescato un po' di matematica :sweat_smile:

:slightly_smiling_face:

Non volendo riaprire un altro topic restando in tema IOT, come accennavo qualche post fa ho una nano con un modulo ESP-01 (ESP8266 wifi) che uso su un altra app, in pratica mando lo stato di un contatto all' app che mi notifica l'evento es."allarme", ora sul sito di Arduino ho letto che si può fare qualcosa di simile ma ovviamente con i dispositivi wifi Arduino ma sapete se posso usare la mia combinazione?
Grazie