Esercizio: Temperatura media (non-blocking mode)
Si consideri il circuto precedente.
Si desidera effettuare 10 misurazioni di temperatura distanziate di 1 secondo e visualizzarne la media.
Soluzione:
#define NMAX 10
#define sensor_pin A0
int valoreADC;
float Tmisurata;
float Tmedia;
float vettoreMisure[NMAX];
unsigned long lastTick = 0;
unsigned long periodoCampionamento = 1000;
unsigned long timenow;
int i;
void setup (){
Serial.begin(9600);
i = 0;
}
void loop (){
timenow = millis();
if (timenow > lastTick + periodoCampionamento) {
valoreADC = analogRead(sensor_pin); //lettura valore ADC
vettoreMisure[i] = 500.0/1024.0*float(valoreADC);
lastTick = timenow;
i++;
// Controllo se sono state fatte NMAX acquisizioni
if (i>=NMAX) {
// calcolo media
Tmedia = 0;
for (i=0; i<NMAX; i++){
Tmedia = Tmedia + vettoreMisure[i];
}
Tmedia = Tmedia / NMAX;
// stampa la temperatura sul serial monitor
Serial.print("Temperatura media misurata: ");
Serial.print(Tmedia);
Serial.println(" gradi C");
i = 0; // ricomincio da capo
}
}
}
Last modified: Tuesday, 6 April 2021, 8:35 PM