#include <OneWire.h>
#include <DallasTemperature.h>
// Pin a cui è collegato il sensore DS18B20
#define ONE_WIRE_BUS 11
// Configurazione della libreria OneWire
OneWire oneWire(ONE_WIRE_BUS);
// Passare la nostra istanza oneWire a Dallas Temperature
DallasTemperature sensors(&oneWire);
const int bufferSize = 10;
float tempBuffer[bufferSize];
int index = 0;
float totalTemperature = 0;
void setup() {
  Serial.begin(9600);
  sensors.begin();
  // Inizializza il buffer con valori a 0
  for (int i = 0; i < bufferSize; i++) {
    tempBuffer[i] = 0;
  }
}
void loop() {
  sensors.requestTemperatures(); // Invia il comando per ottenere le temperature
  float temperature = sensors.getTempCByIndex(0); // Leggi la temperatura in gradi Celsius
  // Aggiorna il buffer circolare
  totalTemperature -= tempBuffer[index]; // Sottrai il vecchio valore dalla somma totale
  tempBuffer[index] = temperature;       // Aggiorna il valore nel buffer
  totalTemperature += tempBuffer[index]; // Aggiungi il nuovo valore alla somma totale
  index = (index + 1) % bufferSize;      // Aggiorna l'indice per il prossimo valore
  // Calcola la media
  float averageTemperature = totalTemperature / bufferSize;
  // Stampa la temperatura corrente e la media
  Serial.print("Temperatura corrente: ");
  Serial.print(temperature);
  Serial.print(" °C, Media: ");
  Serial.print(averageTemperature);
  Serial.println(" °C");
  delay(1000); // Attendi un secondo prima della prossima lettura
}