#include <OneWire.h>
#include <DallasTemperature.h>
#define TEMP_PIN 13
#define HEATER 2
#define BUZZER 5
OneWire oneWire(TEMP_PIN);
DallasTemperature sensor(&oneWire);
void setup() {
Serial.begin(115200);
sensor.begin();
pinMode(HEATER, OUTPUT);
pinMode(BUZZER, OUTPUT);
digitalWrite(HEATER, LOW);
noTone(BUZZER);
}
void loop() {
sensor.requestTemperatures();
float t = sensor.getTempCByIndex(0);
// Ignore invalid or out-of-range readings
if (t == -127.0 || t == 85.0 || t < -50 || t > 125) {
Serial.println("Invalid temperature reading. Skipping...");
noTone(BUZZER);
digitalWrite(HEATER, LOW);
delay(1000);
return;
}
String state;
if (t >= 50) { // OVERHEAT
state = "OVERHEAT";
digitalWrite(HEATER, LOW);
tone(BUZZER, 1000); // Beep sound
delay(500);
noTone(BUZZER);
delay(500);
return; // Keep beeping loop
}
else if (t >= 45) { // TARGET
state = "TARGET";
digitalWrite(HEATER, LOW);
noTone(BUZZER);
}
else if (t >= 40) { // STABILIZING
state = "STABILIZING";
digitalWrite(HEATER, HIGH);
noTone(BUZZER);
}
else if (t >= 10) { // HEATING
state = "HEATING";
digitalWrite(HEATER, HIGH);
noTone(BUZZER);
}
else if (t<10){ // IDLE
state = "IDLE";
digitalWrite(HEATER, LOW);
noTone(BUZZER);
}
Serial.print("Temp: ");
Serial.print(t);
Serial.print(" °C | State: ");
Serial.println(state);
delay(500);
}