const int THERMISTOR_PIN = 0; const float referenceResistance = 10000.0; // Resistance at reference temperature (in ohms) const float referenceTemperature = 25.0; // Reference temperature in degrees Celsius const float beta = 3950; // Beta value of the thermistor int i = 0; int sinceStart = 0; float averageArray[600]; bool calculateData = false; int entryCount = 0; unsigned long shortTime; float minValue = 1000; float maxValue = 0; void setup() { Serial.begin(115200); delay(100); Serial.println("STARTING PROGRAM..."); Serial.println("========================================"); Serial.println("ATTENTION: Enter '1' for Average Value"); Serial.println(" Made by: Brendon Hauck"); Serial.println(" (6/2/23) "); Serial.println(" ESP32 Temperature Reader"); Serial.println("========================================"); pinMode(THERMISTOR_PIN, INPUT); } void loop() { if (Serial.available() > 0) { //checks to see if there is any input into the Serial Port char average = Serial.read(); if (average == '1') { // if that value is true, begin to take the average calculateData = true; } } if (i >= 600) { //Checks if i has passed 600, meaning 10 minutes of data have passed i = 0; } int rawValue = analogRead(THERMISTOR_PIN); float voltage = rawValue * (3.3 / 4095); // Convert ADC value to voltage float resistance = ((3.3 * referenceResistance) / voltage) - referenceResistance; // Calculate thermistor resistance float steinhart = 1.0 / ((resistance / referenceResistance) / beta + 1.0 / (referenceTemperature + 273.15)); // Steinhart-Hart equation float temperatureC = steinhart - 273.15; // Temperature in Celsius float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0; // Temperature in Fahrenheit if (millis() > (shortTime + 1000)) { Serial.print(sinceStart); Serial.print(" Seconds: "); Serial.print(temperatureF); //End of Conversion Data Serial.println("ºF"); averageArray[i] = temperatureF; //sets the current temperature into an array slot, starting at 0, increasing up to 599, for 10 minutes worth of data if (calculateData) { //Begin to average the numbers entryCount++; // Increment the number of entries float average; if (entryCount < 600) { average = calculateArrayAverage(averageArray, entryCount); // Calculate the average value using the available entries } else { average = calculateArrayAverage(averageArray, 600); // Calculate the average value using the latest 600 entries } if(minValue >= temperatureF){ minValue = temperatureF; } if(maxValue <= temperatureF){ maxValue = temperatureF; } Serial.println("==============="); Serial.println("DATA RECORD"); Serial.print("Average: "); Serial.print(average); Serial.println("ºF"); Serial.print("Min Temp: "); Serial.print(minValue); Serial.println("ºF"); Serial.print("Max Temp: "); Serial.print(maxValue); Serial.println("ºF"); Serial.println("==============="); calculateData = false; // Reset the flag } i++; sinceStart++; shortTime = millis(); } } float calculateArrayAverage(float arr[], int length) { float sum = 0; for (int j = 0; j < length; j++) { sum += arr[j]; } return sum / length; }