#include #define LM75A_ADDR 0x48 // I2C address of M2M_LM75A temperature sensor const unsigned long MEASUREMENT_INTERVAL = 1000; // Interval between measurements in milliseconds const unsigned long SUMMARY_INTERVAL = 600000; // Interval for summary output in milliseconds (10 minutes) const unsigned long TOTAL_RUN_TIME = 86400000; // Total run time in milliseconds (24 hours) unsigned long previousMeasurementTime = 0; unsigned long previousSummaryTime = 0; unsigned long startTime = 0; float totalTemperature = 0.0; unsigned int numMeasurements = 0; float highestTemperature = -273.15; // Absolute zero as initial value float lowestTemperature = 1000.0; // High initial value void setup() { Serial.begin(9600); Wire.begin(); startTime = millis(); } void loop() { unsigned long currentMillis = millis(); // Perform a measurement every MEASUREMENT_INTERVAL milliseconds if (currentMillis - previousMeasurementTime >= MEASUREMENT_INTERVAL) { previousMeasurementTime = currentMillis; float temperature = readTemperature(); totalTemperature += temperature; numMeasurements++; if (temperature > highestTemperature) { highestTemperature = temperature; } if (temperature < lowestTemperature) { lowestTemperature = temperature; } Serial.print("Temperature: "); Serial.print(temperature); Serial.println(" °C"); } // Output summary information every SUMMARY_INTERVAL milliseconds if (currentMillis - previousSummaryTime >= SUMMARY_INTERVAL) { previousSummaryTime = currentMillis; printSummary(); } // Stop the program after reaching the total run time if (currentMillis - startTime >= TOTAL_RUN_TIME) { printSummary(); while (true) { // Do nothing, program stops here } } } float readTemperature() { Wire.beginTransmission(LM75A_ADDR); Wire.write(0); // Register address for temperature reading Wire.endTransmission(false); Wire.requestFrom(LM75A_ADDR, 2); if (Wire.available()) { int msb = Wire.read(); int lsb = Wire.read(); float temperature = ((msb << 8) | lsb) / 256.0; return temperature; } return -273.15; // Return absolute zero if reading fails } void printSummary() { unsigned long elapsedTime = millis() - startTime; unsigned int numAverages = elapsedTime / SUMMARY_INTERVAL; float overallAverage = totalTemperature / numMeasurements; Serial.println(); Serial.println("----- Summary -----"); Serial.print("Elapsed time: "); Serial.print(elapsedTime / 60000); Serial.println(" minutes"); Serial.print("Number of measurements: "); Serial.println(numMeasurements); Serial.print("Overall average temperature: "); Serial.print(overallAverage); Serial.println(" °C"); Serial.print("Highest temperature: "); Serial.print(highestTemperature); Serial.println(" °C"); Serial.print("Lowest temperature: "); Serial.print(lowestTemperature); Serial.println(" °C"); Serial.println("10-minute averages:"); unsigned int count = 1