#include <DHT.h>
#include <LiquidCrystal_I2C.h>
// Define DHT11 pin
#define DHTPIN 2
#define DHTTYPE DHT11
// Define L298N control pins
#define ENA_PIN 9
#define IN1_PIN 10
#define IN2_PIN 11
// Define I2C LCD address and dimensions (adjust if needed)
LiquidCrystal_I2C lcd(0x27, 16, 2); // Common address is 0x27 or 0x3F
// Initialize DHT sensor
DHT dht(DHTPIN, DHTTYPE);
void setup() {
  Serial.begin(9600);
  Serial.println("Temperature Based Fan Control");
  // Initialize LCD
  lcd.init();
  lcd.backlight();
  lcd.print("Initializing...");
  // Initialize DHT sensor
  dht.begin();
  // Set L298N control pins as outputs
  pinMode(ENA_PIN, OUTPUT);
  pinMode(IN1_PIN, OUTPUT);
  pinMode(IN2_PIN, OUTPUT);
  // Set initial motor direction (optional, can be fixed)
  digitalWrite(IN1_PIN, HIGH);
  digitalWrite(IN2_PIN, LOW);
  // Stop the fan initially
  analogWrite(ENA_PIN, 0);
  lcd.clear();
}
void loop() {
  // Read temperature every 2 seconds
  delay(1000);
  float temperature = dht.readTemperature();
  // Check if reading was successful
  if (isnan(temperature)) {
    Serial.println("Failed to read from DHT sensor!");
    lcd.clear();
    lcd.print("DHT Error!");
    return;
  }
  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.println(" *C");
  // Control fan speed based on temperature
  int fanSpeed = 0;
  if (temperature > 30) {
    fanSpeed = 255; // Full speed
  } else if (temperature > 28) {
    fanSpeed = 180; // Medium speed
  } else if (temperature > 26) {
    fanSpeed = 100; // Low speed
  } else {
    fanSpeed = 0;   // Fan off
  }
  // Set fan speed using PWM (0-255)
  analogWrite(ENA_PIN, fanSpeed);
  Serial.print("Fan Speed: ");
  Serial.println(fanSpeed);
  // Display temperature and fan speed on LCD
  lcd.clear();
  lcd.print("Temp: ");
  lcd.print(temperature);
  lcd.print(" C");
  lcd.setCursor(0, 1);
  lcd.print("Fan: ");
  if (fanSpeed > 0) {
    lcd.print(map(fanSpeed, 0, 255, 0, 100)); // Display speed as percentage
    lcd.print("%");
  } else {
    lcd.print("OFF");
  }
}