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
}
}
}
Ultime modifiche: martedì, 6 aprile 2021, 20:35