#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define GAS_PIN A0
#define FLAME_PIN D2
#define GREEN_LED D3
#define YELLOW_LED D4 // FIXED: was D5
#define RED_LED D5 // FIXED: was D4
#define BUZZER D6
#define BUTTON D7
int threshold = 500;
String currentState = "";
void setup() {
Serial.begin(115200);
pinMode(FLAME_PIN, INPUT_PULLUP);
pinMode(BUTTON, INPUT_PULLUP);
pinMode(GREEN_LED, OUTPUT);
pinMode(YELLOW_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(BUZZER, OUTPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("FIRE & GAS");
lcd.setCursor(0, 1);
lcd.print("DETECTION SYS");
delay(2000);
lcd.clear();
}
void loop() {
int gas = analogRead(GAS_PIN);
bool flame = digitalRead(FLAME_PIN) == LOW;
Serial.print("Gas Value: ");
Serial.println(gas);
if (flame) {
digitalWrite(RED_LED, HIGH);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(GREEN_LED, LOW);
digitalWrite(BUZZER, HIGH);
if (currentState != "FIRE") {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("FIRE ALERT!");
lcd.setCursor(0, 1);
lcd.print("FLAME FOUND");
currentState = "FIRE";
}
} else if (gas > threshold) {
digitalWrite(YELLOW_LED, HIGH);
digitalWrite(RED_LED, LOW);
digitalWrite(GREEN_LED, LOW);
digitalWrite(BUZZER, HIGH);
if (currentState != "GAS") {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("GAS LEAK!");
lcd.setCursor(0, 1);
lcd.print("HIGH GAS");
currentState = "GAS";
}
} else {
digitalWrite(GREEN_LED, HIGH);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(RED_LED, LOW);
digitalWrite(BUZZER, LOW);
if (currentState != "SAFE") {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SYSTEM SAFE");
lcd.setCursor(0, 1);
lcd.print("MONITORING");
currentState = "SAFE";
}
}
if (digitalRead(BUTTON) == LOW) {
digitalWrite(BUZZER, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("RESET DONE");
lcd.setCursor(0, 1);
lcd.print("SYSTEM READY");
delay(1000);
currentState = "";
}
delay(300);
}