#include "U8glib.h"
#include <DHT.h>
// Pin Definitions
#define DHTPIN 12
#define FANPIN 13
#define DHTTYPE DHT22
// U8glib Display Object
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST);
// DHT Sensor Object
DHT dht(DHTPIN, DHTTYPE);
// Humidity Threshold
const float humidityThreshold = 60.0;
bool fansOn = false;
void setup() {
// Start Serial Communication for Debugging
Serial.begin(9600);
// Initialize DHT Sensor
dht.begin();
// Initialize Fan Pin
pinMode(FANPIN, OUTPUT);
digitalWrite(FANPIN, LOW);
// Set Font for Display
u8g.setFont(u8g_font_6x10); // Use a small, readable font
}
void loop() {
// Read Humidity and Temperature from DHT Sensor
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Print sensor values to Serial Monitor for debugging
Serial.print("Humidity: ");
Serial.println(humidity);
Serial.print("Temperature: ");
Serial.println(temperature);
// Handle NaN (Not a Number) Case
if (isnan(humidity) || isnan(temperature)) {
u8g.firstPage();
do {
u8g.drawStr(10, 30, "DHT Read Error");
} while (u8g.nextPage());
delay(2000); // Retry after 2 seconds
return;
}
// Control Fan Based on Humidity
if (humidity > humidityThreshold) {
fansOn = true;
digitalWrite(FANPIN, HIGH);
} else {
fansOn = false;
digitalWrite(FANPIN, LOW);
}
// Render Display Content
u8g.firstPage();
do {
// Clear the screen
u8g.drawStr(10, 10, "Curing Chamber");
// Directly Render Humidity
char humidityText[16];
dtostrf(humidity, 4, 1, humidityText); // Convert float to string
u8g.drawStr(10, 25, "Humidity:");
u8g.drawStr(80, 25, humidityText);
u8g.drawStr(110, 25, "%");
// Directly Render Temperature
char tempText[16];
dtostrf(temperature, 4, 1, tempText); // Convert float to string
u8g.drawStr(10, 40, "Temp:");
u8g.drawStr(80, 40, tempText);
u8g.drawStr(110, 40, "C");
// Fan Status Display
u8g.drawStr(10, 55, "Fans:");
u8g.drawStr(60, 55, fansOn ? "ON" : "OFF");
} while (u8g.nextPage());
// Delay to allow screen refresh
delay(2000); // Update every 2 seconds
}