#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define DHTPIN 4
#define DHTTYPE DHT22
#define MQ7_ANA A1
#define MQ7_DIG 3
#define Threshold 400
#define greenLED 7
#define redLED 2
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
int buzzerPin = 12;
int ledPin = 5;
float flamelevel = 0;
const int minSurvive = 15;
const int idleLow = 20;
const int idleTarget = 30;
const int firingLow = 70;
const int firingHigh = 90;
bool isFireDetected = false;
bool showFlame = true;
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(2, 0);
lcd.print("PENDETEKSI");
lcd.setCursor(2, 1);
lcd.print("KEBAKARAN");
delay(2000);
lcd.clear();
Serial.begin(9600);
pinMode(MQ7_ANA, INPUT);
pinMode(MQ7_DIG, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(redLED, OUTPUT);
dht.begin();
}
void loop() {
float t = dht.readTemperature();
float analogValue = analogRead(A0);
int smokeLevel = analogRead(MQ7_ANA);
Serial.print("Sensor : ");
Serial.println(analogValue, 0);
flamelevel = map(analogValue, 0, 1024, 0, 100);
Serial.print(flamelevel, 0);
Serial.println("%");
Serial.print(smokeLevel);
if (showFlame) {
lcd.setCursor(0, 0);
lcd.print("Flame Level: ");
lcd.print(flamelevel, 0);
lcd.print("% ");
} else {
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(t);
lcd.print(" C ");
}
if (smokeLevel > Threshold && !isFireDetected) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KEBAKARAN!");
tone(buzzerPin, 2000);
delay(1000);
digitalWrite(ledPin, HIGH);
isFireDetected = true;
} else if (smokeLevel <= Threshold && isFireDetected) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tidak Kebakaran");
noTone(buzzerPin); // Mematikan suara buzzer
digitalWrite(ledPin, LOW);
isFireDetected = false;
}
delay(1000);
showFlame = !showFlame; // Toggle between showing flame level and temperature
}