#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// Define the pin for the DS18B20 sensor
#define ONE_WIRE_BUS 2
// OLED display dimensions
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
// Create instances
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Variables for temperature tracking
float currentTemp = 0.0;
float minTemp = 100.0; // Initialize to a high value
float maxTemp = -100.0; // Initialize to a low value
float sumTemp = 0.0;
int numReadings = 0;
void setup() {
// Start the serial communication
Serial.begin(9600);
// Initialize the DS18B20 sensor
sensors.begin();
// Initialize the OLED display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;); // Halt if display initialization fails
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.display();
}
void loop() {
// Request temperature from the DS18B20 sensor
sensors.requestTemperatures();
currentTemp = sensors.getTempCByIndex(0);
// Update min and max temperatures
if (currentTemp < minTemp) {
minTemp = currentTemp;
}
if (currentTemp > maxTemp) {
maxTemp = currentTemp;
}
// Update average temperature
sumTemp += currentTemp;
numReadings++;
float avgTemp = sumTemp / numReadings;
// Print values to Serial Monitor for debugging
Serial.print("Current Temperature: ");
Serial.print(currentTemp);
Serial.print(" °C, Min: ");
Serial.print(minTemp);
Serial.print(" °C, Max: ");
Serial.print(maxTemp);
Serial.print(" °C, Avg: ");
Serial.print(avgTemp);
Serial.println(" °C");
// Display values on the OLED
display.clearDisplay();
display.setCursor(0, 0);
display.println("Current: " + String(currentTemp, 1) + " C");
display.println("Min: " + String(minTemp, 1) + " C");
display.println("Max: " + String(maxTemp, 1) + " C");
display.println("Avg: " + String(avgTemp, 1) + " C");
display.display();
// Wait for a second before the next reading
delay(1000);
}