#include <OneWire.h>
#include <DallasTemperature.h>

// Hardware Pins
#define ONE_WIRE_BUS D7  // DS18B20 data pin
#define LED_PIN D2       // LED indicator

// Temperature Thresholds
const float ON_THRESHOLD = 7.0;   // LED ON if difference ≥ 7°C
const float OFF_THRESHOLD = 5.0;  // LED OFF if difference ≤ 5°C
const unsigned long CHECK_INTERVAL = 1000;  // 1-second update rate

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress sensor1, sensor2;
bool ledState = false;

void setup() {
  Serial.begin(115200);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
  
  // Initialize sensors
  sensors.begin();
  
  // Check if sensors are connected
  bool sensor1Found = sensors.getAddress(sensor1, 0);
  bool sensor2Found = sensors.getAddress(sensor2, 1);
  
  if (!sensor1Found || !sensor2Found) {
    Serial.println("[ERROR] Missing sensors:");
    Serial.print("Sensor 1: ");
    Serial.println(sensor1Found ? "OK" : "NOT FOUND");
    Serial.print("Sensor 2: ");
    Serial.println(sensor2Found ? "OK" : "NOT FOUND");
    while(1); // Halt if sensors missing
  }
  
  Serial.println("Temperature Monitor Started");
  Serial.println("T1(°C)\tT2(°C)\tΔ(°C)\tLED");
  Serial.println("---------------------------");
}

void loop() {
  static unsigned long lastCheck = 0;
  
  if (millis() - lastCheck >= CHECK_INTERVAL) {
    lastCheck = millis();
    
    // Read temperatures
    sensors.requestTemperatures();
    float temp1 = sensors.getTempC(sensor1);
    float temp2 = sensors.getTempC(sensor2);
    float diff = abs(temp1 - temp2);

    // Control LED with hysteresis
    if (diff >= ON_THRESHOLD) {
      ledState = true;
    } else if (diff <= OFF_THRESHOLD) {
      ledState = false;
    }
    digitalWrite(LED_PIN, ledState ? HIGH : LOW);

    // Print formatted output to Serial
    Serial.print(temp1, 1);  // 1 decimal place
    Serial.print("\t");
    Serial.print(temp2, 1);
    Serial.print("\t");
    Serial.print(diff, 1);
    Serial.print("\t");
    Serial.println(ledState ? "ON" : "OFF");
  }
}