#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT22
#define HEATER_PIN 3
#define LED_PIN 13
DHT dht(DHTPIN, DHTTYPE);
enum HeaterState {
IDLE,
HEATING,
STABILIZING,
TARGET_REACHED,
OVERHEAT
};
HeaterState currentState = IDLE;
void setup() {
Serial.begin(9600);
pinMode(HEATER_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
dht.begin();
}
void loop() {
float temp = dht.readTemperature();
if (isnan(temp)) {
Serial.println("Failed to read temperature!");
return;
}
if (temp < 25) currentState = IDLE;
else if (temp < 45) currentState = HEATING;
else if (temp < 48) currentState = STABILIZING;
else if (temp <= 50) currentState = TARGET_REACHED;
else currentState = OVERHEAT;
switch (currentState) {
case IDLE:
digitalWrite(HEATER_PIN, LOW);
digitalWrite(LED_PIN, LOW);
Serial.print("State: IDLE | ");
break;
case HEATING:
digitalWrite(HEATER_PIN, HIGH);
digitalWrite(LED_PIN, HIGH);
Serial.print("State: HEATING | ");
break;
case STABILIZING:
digitalWrite(HEATER_PIN, HIGH);
digitalWrite(LED_PIN, HIGH);
Serial.print("State: STABILIZING | ");
break;
case TARGET_REACHED:
digitalWrite(HEATER_PIN, LOW);
digitalWrite(LED_PIN, LOW);
Serial.print("State: TARGET REACHED | ");
break;
case OVERHEAT:
digitalWrite(HEATER_PIN, LOW);
digitalWrite(LED_PIN, LOW);
Serial.print("State: OVERHEAT! | ");
break;
}
Serial.print("Temp: ");
Serial.print(temp);
Serial.println(" °C");
delay(2000);
}