#include #define LM75A_ADDRESS 0x48 M2M_LM75A lm75a(LM75A_ADDRESS); unsigned long previousTime = 0; const unsigned long interval = 1000; // Log data every 1 second float maxTemperature = -273.15; // Initialize with minimum possible temperature float minTemperature = 1000; // Initialize with maximum possible temperature float totalTemperature = 0; int readingCount = 0; const unsigned long summaryInterval = 600000; // 10 minutes unsigned long summaryStartTime = 0; int summaryReadingCount = 0; float summaryTotalTemperature = 0; float summaryMaxTemperature = -273.15; // Initialize with minimum possible temperature float summaryMinTemperature = 1000; // Initialize with maximum possible temperature void initializeSensor(); unsigned long getCurrentTime(); bool hasIntervalPassed(unsigned long currentTime, unsigned long interval); void resetTimer(unsigned long currentTime); void updateStatistics(float temperature); void processUserInput(char input); float getOverallAverage(); void printSummary(); void setup() { lm75a.begin(); Serial.begin(9600); summaryStartTime = getCurrentTime(); } void loop() { unsigned long currentTime = getCurrentTime(); if (hasIntervalPassed(currentTime, interval)) { float temperature = lm75a.getTemperature(); updateStatistics(temperature); Serial.print("Temperature: "); Serial.print(temperature); Serial.println(" °C"); resetTimer(currentTime); if (hasIntervalPassed(currentTime, summaryInterval)) { printSummary(); } if (Serial.available()) { char input = Serial.read(); processUserInput(input); } } } void initializeSensor() { lm75a.begin(); } unsigned long getCurrentTime() { return millis(); } bool hasIntervalPassed(unsigned long currentTime, unsigned long interval) { return currentTime - previousTime >= interval; } void resetTimer(unsigned long currentTime) { previousTime = currentTime; } void updateStatistics(float temperature) { // Update maximum temperature if (temperature > maxTemperature) { maxTemperature = temperature; } // Update minimum temperature if (temperature < minTemperature) { minTemperature = temperature; } // Update total temperature and count totalTemperature += temperature; readingCount++; // Update summary statistics summaryTotalTemperature += temperature; summaryReadingCount++; if (temperature > summaryMaxTemperature) { summaryMaxTemperature = temperature; } if (temperature < summaryMinTemperature) { summaryMinTemperature = temperature; } } void processUserInput(char input) { switch (input) { case 'H': Serial.print("Maximum Temperature: "); Serial.print(maxTemperature); Serial.println(" °C"); break; case 'L': Serial.print("Minimum Temperature: "); Serial.print(minTemperature); Serial.println(" °C"); break; case 'A': float overallAverage = getOverallAverage(); Serial.print("Overall Average Temperature: "); Serial.print(overallAverage); Serial.println(" °C"); break; } } float getOverallAverage() { return totalTemperature / readingCount; } void printSummary() { unsigned long summaryDuration = getCurrentTime() - summaryStartTime; float summaryAverage = summaryTotalTemperature / summaryReadingCount; Serial.print("Number of Readings: "); Serial.println(summaryReadingCount); Serial.print("Maximum Temperature: "); Serial.print(summaryMaxTemperature); Serial.println(" °C"); Serial.print("Minimum Temperature: "); Serial.print(summaryMinTemperature); Serial.println(" °C"); Serial.print("Average Temperature: "); Serial.print(summaryAverage); Serial.println(" °C"); Serial.println("-----------------------------"); // Reset summary statistics summaryStartTime = getCurrentTime(); summaryReadingCount = 0; summaryTotalTemperature = 0; summaryMaxTemperature = -273.15; // Reset to minimum possible temperature summaryMinTemperature = 1000; // Reset to maximum possible temperature }