#include #define LM57A_ADDRESS 0x4F // LM57A I2C address #define SAMPLE_SIZE 600 // Number of samples for 10 minutes #define AVERAGES_SIZE 144 // Number of 10-minute averages for 24 hours float temperatureSamples[SAMPLE_SIZE]; float temperatureAverages[AVERAGES_SIZE]; unsigned long previousMillis = 0; unsigned long interval = 1000; // Sampling interval in milliseconds int sampleIndex = 0; int averageIndex = 0; void setup() { Serial.begin(9600); Wire.begin(); } void loop() { unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; float temperature = readTemperature(); Serial.print("Temperature: "); Serial.print(temperature); Serial.println(" °F"); temperatureSamples[sampleIndex] = temperature; sampleIndex++; if (sampleIndex >= SAMPLE_SIZE) { float averageTemperature = calculateAverageTemperature(temperatureSamples, SAMPLE_SIZE); temperatureAverages[averageIndex] = averageTemperature; averageIndex++; if (averageIndex >= AVERAGES_SIZE) { // Print the 24-hour temperature averages Serial.println("\nTemperature Averages (24 hours):"); for (int i = 0; i < AVERAGES_SIZE; i++) { Serial.print("Average "); Serial.print(i + 1); Serial.print(": "); Serial.print(temperatureAverages[i]); Serial.println(" °F"); } while (true) { // Loop indefinitely after 24 hours of data collection } } sampleIndex = 0; } } } float readTemperature() { Wire.beginTransmission(LM57A_ADDRESS); Wire.write(0x00); // Select temperature register Wire.endTransmission(); Wire.requestFrom(LM57A_ADDRESS, 2); if (Wire.available() >= 2) { int16_t rawTemp = Wire.read() << 8 | Wire.read(); float temperatureCelsius = rawTemp / 256.0; float temperatureFahrenheit = (temperatureCelsius * 9 / 5) + 32; // Conversion to Fahrenheit return temperatureFahrenheit; } return 0.0; // Return 0.0 if temperature reading fails } float calculateAverageTemperature(float* data, int size) { float sum = 0.0; for (int i = 0; i < size; i++) { sum += data[i]; } return sum / size; }